首页 文章

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

提问于
浏览
-3

如书中所述 -

问题在于区分输入的结束和有效数据 . 解决方案是当没有更多输入时,getchar返回一个独特的值,这个值不能与任何真实字符混淆 . 这个值被称为EOF,对于"end of file."我们必须声明c是一个足够大的类型,以保存getchar返回的任何值 . 我们不能使用char,因为除了任何可能的char之外,c必须足够大以容纳EOF . 因此我们使用int .

main()
{
    int c;
    c = getchar();
    while(c != EOF) {
    putchar(c);
    c = getchar();
    }
}

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

1 回答

  • 3

    char 可以包含256个不同的值(0到255) . 如果 EOFchar ,那么 EOF 的值将是0到255之间的某个值,这意味着将有一个您无法读取的字符 . 因此 EOF 的值不能介于0到255之间,这意味着它不能适合 char ,这意味着它的类型必须大于 char ,例如 int .

    换句话说 EOF 不是 char ,我们不想将它存储在 char 中 . 它的唯一目的是使程序能够检测到文件末尾之外的一个char是否已尝试读取 .

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

相关问题