我编写了以下程序来了解EOF的行为:
#include<stdio.h>
int main ()
char c = 0;
printf("Enter some chars, EOF stops printing:");
while ((c == getc(stdin)) != EOF)
printf("c = %c, (int) c = %d\n", c, (int) c);
return 0;
}
但是,如果我输入abcd
之类的内容,我会收到此输出:
c = a, (int) c = 97
c = a, (int) c = 97
c = a, (int) c = 97
答案 0 :(得分:7)
您有一个==
而不是=
,因此您永远不会存储getc
次返回的内容:
while ((c == getc(stdin)) != EOF) {
^^
当然c
应该是int
,而不是char
。
答案 1 :(得分:1)
您必须更好地阅读文档; getc()
会返回int
,因为EOF
不适合char
。
此外,您同时使用scanf()
和getc()
,这会因输入流缓冲而造成混乱。
尝试这样的事情:
#include <stdio.h>
int main()
int c = 0;
printf("Enter some chars, EOF stops printing:");
while ((c = getc(stdin)) != EOF) {
printf("c = %c, (int) c = %d\n", c, c);
}
return 0;
}
我还在您的代码中添加了遗失的}
,并在c
的调用中移除了printf()
的演员,现在c
int
%c
不需要1}}。顺便说一下,这也是{{1}}格式说明符的正确类型。