1

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

2 回答 2

7

你有 a==而不是 a=所以你永远不会存储任何getc返回:

while ((c == getc(stdin)) != EOF) {
          ^^

And of course c should be int, not char.

于 2012-08-27T13:48:44.303 回答
1

您必须更好地阅读文档;getc()返回int,因为EOF不适合 a char

此外,您同时使用scanf()and 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()不需要了。顺便说一下,这也是格式说明符的正确类型。cint%c

于 2012-08-27T13:47:59.910 回答