2014-06-14 172 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 

它會正常工作。