尝试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
的时候为什么有输出?
格式说明符“%*.0f”
需要两个参数:一个是宽度说明符,另一个是double。因为只传递一个,所以它会调用未定义的行为。
如果您更正它,例如:
printf("%*.0f",5, nc); // width 5
它会工作正常的。