2011-04-23 96 views
0

全部。我不知道是否適合在這裏問這樣一個「簡單」的問題,但實際上這對我來說很難:,這裏是一個問題,有點C代碼:一個c編程問題

main() 
{ 
    int c, i; 
    for (i = 0; (c = getchar()) != EOF && c != '\n'; ++i) 
     printf("%d", i); 
    if (c == '\n') 
     printf("%d", i); 
} 

執行該程序後當我輸入,比如, 「ABC \ n」,該程序將返回:

0 
1 
2 
3 

我不知道爲什麼結果不是

0 
1 
2 

因爲當c == '\ n',有是沒有增加我1的聲明。這就是我我以爲,我一定是錯的,你會告訴我我錯了嗎?謝謝!

+0

當我運行你的程序時,輸入'abc',輸出'0123' – 2011-04-23 05:44:35

+0

對不起,這是我的錯。程序的輸出應該是'0123'。 – Oliver 2011-04-23 05:56:50

回答

0

for循環操作的順序是:

i = 0 
(c = getchar()) != EOF && c != '\n' // c is set to 'a' 
printf("%d", i) // displays 0 

++i // i == 1 
(c = getchar()) != EOF && c != '\n' // c is set to 'b' 
printf("%d", i) // displays 1 

++i // i == 2 
(c = getchar()) != EOF && c != '\n' // c is set to 'c' 
printf("%d", i) // displays 2 

++i // i == 3 
(c = getchar()) != EOF && c != '\n' // c is set to '\n' 
// the loop exits 

所以for循環打印完畢後,這對i最新的價值,這是3

0

++i得到執行c == '\n'的情況。

也許這個代碼有助於澄清?

int i; 
for (i = 0; i <= 3; ++i) 
    printf("%d\n", i); 

在循環結束時,我將是4,因爲最後的增量。

+0

謝謝,現在我明白了:) – Oliver 2011-04-23 06:05:13

+0

實際上,將'i'增加到3的'++ i'在*'c'被'getchar()'設置爲''\ n''之前得到執行*呼叫。 – 2011-04-23 06:32:42

0

的主要問題是與printf()指數變量i的預增量。代替預增量,使用後增量,即i ++在for循環內。其原因是由於預增量。當循環內部的條件停止時,當您使用預增量時,存儲在i中的值已經爲4。

main() 
{ 
    int c, i; 
    for (i = 0; (c = getchar()) != EOF && c != '\n'; i++) 
     printf("%d", i); 
    if (c == '\n') 
     printf("%d", i); 
}