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

S.S*_*Sot 0 c loops while-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;
}
Run Code Online (Sandbox Code Playgroud)
#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;
}
Run Code Online (Sandbox Code Playgroud)

klu*_*utt 5

让我们看看while条件:

i < lim - 1, (c = getchar()) != '\n', c != EOF
Run Code Online (Sandbox Code Playgroud)

第一部分,i < lim -1没有任何作用。第二部分将执行c = getchar(),但与的比较将'\n'被完全放弃。整个条件的返回值是c != EOF。因此,条件等同于:

(c = getchar()) != EOF
Run Code Online (Sandbox Code Playgroud)

您可以做的是改为使用逗号运算符&&

i < lim - 1 && (c = getchar()) != '\n' && c != EOF
Run Code Online (Sandbox Code Playgroud)