printf连续打印

时间:2014-06-14 18:48:39

标签: c printf

从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 个答案:

答案 0 :(得分:7)

格式说明符"%*.0f"需要两个参数:一个是宽度说明符,另一个是double。由于您只传递一个,因此会调用 undefined behaviour

如果你纠正它,例如:

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

它会正常工作。