我正在读“C语言程序设计语言”一书,并且有一个练习要求验证表达式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);
}
你能否向我解释为什么我的方式不起作用?
答案 0 :(得分:5)
因为如果c
是EOF
,while
循环会终止(或者如果在键入的第一个字符上已经EOF
,则不会启动)。运行循环的另一次迭代的条件是c
不 EOF
。
答案 1 :(得分:4)
显示EOF的值
#include <stdio.h>
int main()
{
printf("EOF on my system is %d\n", EOF);
return 0;
}
EOF在stdio.h中定义为-1
答案 2 :(得分:3)
通过在Unix中按ctrl + d和在Windows中按ctrl + c,可以通过键盘触发EOF。
示例代码:
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]#
答案 3 :(得分: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.
答案 4 :(得分:0)
使它成为c!= EOF。因为您要打印表达式的结果而不是字符。
答案 5 :(得分:-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”。
希望它有所帮助.......