7

我正在阅读“The C Programming Language”一书,并且有一个练习要求验证表达式getchar() != EOF是否返回 1 或 0。现在,在我被要求这样做之前的原始代码是:

int main()
{
    int c;
    c = getchar();

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

所以我想把它改成:

int main()
{
    int c;
    c = getchar();

    while (c != EOF)
    {
        printf("the value of EOF is: %d", c);
        printf(", and the char you typed was: ");

        putchar(c);
        c = getchar();
    }
}

而书中的答案是:

int main()
{
  printf("Press a key\n\n");
  printf("The expression getchar() != EOF evaluates to %d\n", getchar() != EOF);
}

你能解释一下为什么我的方法不起作用吗?

4

6 回答 6

5

因为 if cis EOFwhile循环终止(或者甚至不会开始,如果它已经EOF在输入的第一个字符上)。运行另一个循环迭代的条件cNOT EOF

于 2013-01-09T12:32:05.617 回答
5

显示 EOF 的值

#include <stdio.h>
int main()
{
   printf("EOF on my system is %d\n", EOF);
   return 0;
}

EOF 在 stdio.h 中通常定义为 -1

于 2013-01-09T12:34:52.690 回答
3

EOF 可以通过键盘触发,在 Unix 中按 ctrl+d,在 Windows 中按 ctrl+c。

示例代码:

    void main()
    {
           printf(" value of getchar() != eof is %d ",(getchar() != EOF));
           printf("value of eof %d", EOF);
    }

输出:

[root@aricent prac]# ./a.out 
a
 value of  getchar() != eof is 1 value of eof -1
[root@aricent prac]# ./a.out 
Press    ctrl+d
 value of   getchar() !=  eof is 0 value of eof -1[root@aricent prac]# 
于 2014-02-10T12:18:33.777 回答
1
Here is my one,
i went through the same problem and same answer but i finally found what every body want to say.
System specification :: Ubuntu 14.04 lts
Software :: gcc


yes the value of EOF is -1 based on this statement
printf("%i",EOF);

but if your code contain like this statement
while((char c=getchar)!=EOF);;
and you are trying to end this loop using -1 value, it could not work.

But instead of -1 you press Ctrl+D your while loop will terminate and you will get your output. 
于 2015-05-19T05:00:28.973 回答
0

改为 c!=EOF。因为您要打印表达式的结果而不是字符。

于 2017-02-01T02:16:04.490 回答
-2

在您的程序中,您正在从 std 输入中读取字符 c = getchar();

这样你就可以获得按键的 ascii 值,它永远不会等于 EOF。

因为EOF是文件结束。

最好尝试打开任何现有文件并从文件中读取,所以当它到达文件结束(EOF)时,它将退出while循环。

好吧,书中的答案是:

int main()
{
  printf("Press a key\n\n");
  printf("The expression getchar() != EOF evaluates to %d\n", getchar() != EOF);
}

尝试理解程序,它得到一个不等于 EOF 的键,所以它应该总是打印“表达式 getchar() != EOF 计算为 0”。

希望能帮助到你.......

于 2013-01-09T12:45:12.367 回答