为什么需要 int 类型来处理 EOF 和 getchar() 的返回?

Abh*_*mar -3 c getchar

正如书中所写——

问题在于区分输入的结尾和有效数据。解决方案是,当没有更多输入时,getchar 返回一个独特的值,该值不能与任何实际字符混淆。该值称为 EOF,即“文件结束”。我们必须将 c 声明为一个足够大的类型,以容纳 getchar 返回的任何值。我们不能使用 char,因为除了任何可能的 char 之外,c 还必须足够大才能容纳 EOF。因此我们使用 int。

main()
{
    int c;
    c = getchar();
    while(c != EOF) {
    putchar(c);
    c = getchar();
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法理解使用 int 而不是 char 的实际原因。EOF 将返回无法存储在 char 中的内容。

Jab*_*cky 5

Achar可以保存 256 个不同的值(0 到 255)。如果EOF是 a char,则 的值EOF将是 0 到 255 之间的某个值,这意味着将有一个字符无法读取。因此 的值EOF不能在 0 到 255 之间,这意味着它不能适合 a char,这意味着它的类型必须大于char,例如 anint

换句话说,不是EOFa并且我们不想将其存储在 a 中。它的唯一目的是使程序能够检测到已尝试读取文件末尾之外的一个字符。charchar

或者换句话说:假设EOF被定义为 255,因此适合char. 现在假设 getchar返回值 255(即EOF)。现在这个值代表什么?是一个EOF还是字符255?