提问者:小点点

打印f连续打印


尝试KandR的另一个示例,我有以下C代码:

#include <stdio.h>

int main(){
  double nc = 5;

  printf("%*.0f",nc);

return 0;
}

这将打印 5,然后它继续从左到右移动(打印空白字符),然后换行,直到按 Ctrl C 停止)。当我将 printf 行更改为 printf(“%.0f”,nc) 时,它按预期工作,即它只打印 5 并停止。

根据http://www.cplusplus.com/reference/cstdio/printf/printf的语法为:

%[flags][width][.precision][length]说明符。

我将[width]更改为*,以便printf不会限制输出中的数字。

1)为什么一直打印空白字符直到停止?

2)当我不给出任何宽度时,printf默认假设什么?

3)我还修改了上面的代码以设置nc = 500,然后printf除了连续的空白字符之外不会打印任何内容!

当我将其更改为500.00时,它将打印500个字符,之后它将继续打印空白字符,直到停止。为什么当我设置nc=500时没有输出,而当我设置nc=500.00的时候为什么有输出?


共1个答案

匿名用户

格式说明符“%*.0f”需要两个参数:一个是宽度说明符,另一个是double。因为只传递一个,所以它会调用未定义的行为。

如果您更正它,例如:

  printf("%*.0f",5, nc); // width 5

它会工作正常的。