读C中的字符

时间:2012-08-27 13:46:16

标签: c

我编写了以下程序来了解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

2 个答案:

答案 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}}格式说明符的正确类型。