为什么 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
未初始化会导致未定义的行为。
我希望用户能够输入一个数字 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
未初始化会导致未定义的行为。