繁体   English   中英

交流编程问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM