[英]a c programming question
所有。 我不确定在这里问这样一个“简单”的问题是否合适,但实际上对我来说很困难:[,这是一个问题和一些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'时,没有语句使i递增1。这就是我的想法,我一定错了,您能告诉我哪里错了吗? 谢谢!
主要问题在于索引变量i的预递增。 代替预增量,在for循环中使用后增量,即i ++。其背后的原因是预增量。 当循环中的条件停止时,使用预增量时,i中存储的值已经为4。
main()
{
int c, i;
for (i = 0; (c = getchar()) != EOF && c != '\n'; i++)
printf("%d", i);
if (c == '\n')
printf("%d", i);
}
所述++i
获取之后执行c == '\\n'
的情况下。
也许这段代码将有助于阐明?
int i;
for (i = 0; i <= 3; ++i)
printf("%d\n", i);
在循环结束时,由于最终的增量,我将为4。
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
循环之后的printf()
打印i
最新值, i
3。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.