繁体   English   中英

在循环体中使用逗号运算符

[英]using comma operator in the body of a loop

我试图以两种不同的方式编写一个while循环,并注意到在条件中使用','两次并不像我认为的那样工作。 我只是对实际发生的事情感到好奇。 这是代码:

#include <stdio.h>

int main()
{
    int i = 0, lim = 1000, c;
    char s[lim];
    while (i < lim - 1, (c = getchar()) != '\n')
    {
        if (c != EOF)
        {
            s[i] = c;
        }
        else
        {   
            break;
        }
        ++i;
    }
    printf("%s\n", s);
    return 0;
}
#include <stdio.h>

int main()
{
    int i = 0, lim = 1000, c;
    char s[lim];
    while (i < lim - 1, (c = getchar()) != '\n', c != EOF)
    {
        s[i] = c;
        ++i;
    }
    printf("%s\n", s);
    return 0;
}

让我们看看while条件:

i < lim - 1, (c = getchar()) != '\n', c != EOF

第一部分i < lim -1没有任何效果。 第二部分将执行c = getchar() ,但与'\n'的比较完全丢弃。 整个条件的返回值为c != EOF 所以条件等价于:

(c = getchar()) != EOF

您可以做的是更改&&的逗号运算符。

i < lim - 1 && (c = getchar()) != '\n' && c != EOF

逗号不进行复杂的逻辑运算。 您需要改用逻辑运算符

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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