【发布时间】:2016-10-06 04:11:33
【问题描述】:
大家好,所以我编写了一些代码来计算用户在控制台中输入的字符,使用 getchar() 和 while 循环,直到输入 EOF 字符,但它增加了 count 它应该的变量。例如,我输入 3 个字符,然后是 EOF 字符(在本例中为 'z'),最后它输出我输入了 6 个字符,如果我输入 4 个字符 + 'z' 则表示 8,如果 5 则表示 10 . 它应该显示 x2 个字符。
#include <stdio.h>
#define END 'z'
int main()
{
printf("Hello:\n");
int count = 0;
int c;
while ((c = getchar()) != END)
{
count++;
}
printf("You entered %d charaters.", count);
}
为什么会这样? :/
【问题讨论】:
-
代码似乎正确。您是在宽字符系统控制台上启动它吗?尝试使用getwchar
-
Couldn't reproduce。您确定您只输入了 3 个字符而没有任何额外的字符,例如换行符吗?另请注意,使用
char存储从getchar()返回的内容并不好,因为它可能返回EOF,而无法存储到char。 -
您正在输入 1[enter]2[enter]3[enter]z[enter]?
-
c必须是int类型。getchar()返回一个int类型的值。将该值分配给char类型的变量会丢失您可能需要的信息。 -
请注意,如果您在输入 END 字符之前指示“文件结尾”(在 Unix 上,通过输入 control-D;在 Windows 上,通过输入 control-Z),您的代码将进入无限环形。你应该使用
int c;(不是char c;)因为getchar()返回一个int,而不是char,你应该在循环条件中使用while ((c = getchar()) != EOF && c != END)(或者你可以测试END和EOF以其他顺序)。你至少应该考虑如果你在最不方便的时刻被告知 EOF 会发生什么。