从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
时会有输出?
答案 0 :(得分:7)
格式说明符"%*.0f"
需要两个参数:一个是宽度说明符,另一个是double。由于您只传递一个,因此会调用 undefined behaviour 。
如果你纠正它,例如:
printf("%*.0f",5, nc); // width 5
它会正常工作。