2014-06-14 119 views
4

试行从KandR另一示例中,我有以下的C代码:printf的连续打印

#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语法是:[精度]

%[标志] [宽度] [长度]说明符。

我改变了[width]*使printf不限制输出数字。

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

2)当我没有给出任何宽度时,printf默认情况下会是什么?

3)我也修改了上面的代码来设置nc = 500,然后printf 不会打印任何东西,除了连续的空白字符!

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

+4

星号会导致printf从参数中读取宽度。试试'printf(“%*。0f”,10,nc)'。 – ooga

回答

7

格式说明符"%*.0f"需要两个参数:一个是宽度说明符,另一个是double。既然你只通过一个,它会调用undefined behaviour

如果你改正它,例如:

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

它会正常工作。