2011-04-23 38 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); 
}