为什么 getchar() 不停止读取 C 中的字符串?

Why doesnt getchar() stop reading strings in C?

我希望用户能够输入一个数字 n,然后程序将从用户那里读取 n 个字符串。但是现在程序不会停止读取字符串。

#include <stdio.h>

#define STRING_MAX 10

int main (void)
{
    char string[STRING_MAX];
    int count;
    int total;
    int n, i;
    int chr;

    scanf("%d", &n);

    for(i=0; i<n; i++)
    {
        do {
            count = 0;
            total = 0;
            while ((chr = getchar() != EOF)&& (chr != '\n'))
            {
                if (count < STRING_MAX - 1)
                    string[count++] = chr;
                total += 1;
            }
            string[count] = '[=10=]';
        } while (total > STRING_MAX - 1);
        printf("The input string was:\n\t%s\n", string);
    }
    return 0;
}

因为你这里有运算符优先级问题

chr = getchar() != EOF

这被评价为

chr = (getchar() != EOF)

因为!=运算符比赋值运算符=higher precendence,所以你只需要像这样添加括号

(chr = getchar()) != EOF

提示:在访问 n 之前检查 scanf() 中的 return 值,因为如果输入无效,您将尝试使用n 未初始化会导致未定义的行为。