关于EOF的问题
c吧
全部回复
仅看楼主
level 1
宇宙怪杰 楼主
操作系统 Ubuntu
编译环境 gcc
编辑器 gedit
通过
#include <stdio.h>
main()
{
    printf("%d\n", EOF);
}
系统返回 -1
可是此段程序
#include <stdio.h>
main()
{
    printf("%d\n", getchar() != EOF);
}
输入-1 返回的是1不是0
还有这段
#include <stdio.h>
main()
{
    int c;
    while ((c = getchar()) != EOF) {
          putchar(c);
     }
}
输入什么字符就返回什么字符,但输入-1同样返回-1,不是应该输入-1后程序结束的吗。
请高手指点。
2011年02月25日 04点02分 1
level 1
EOF是头文件里宏定义的,值为-1,为什么要定义为-1,是有原因的,因为ASCII码中是没有-1的(希望我没记错),比如最后一个例子里,你输入-1,实际上是两个字符,因为一个字符不可能是-1,及时你输入-1,也是不能结束输入的,所以可以作为判断的条件,接受键盘能输入的任意字符,如果要输入停止,可以ctrl+c(好像是吧)。。第2个例子,我没试过,我猜是因为,输出的是getchar()!= EOF 这个表达式的值,因为你输入的任何一个字符都不可能是-1,所以这个式子永远为真,也就是1,所以应该输出1.。。纯属猜测。。。
我是个新手,不知道说的对不对,静等高手指正

2011年02月25日 06点02分 2
level 1
2楼说的不全对,EOF的定义不是因为ASCII码的问题,但是后面的分析很到位,这是getchar()的问题,理论上说,楼主的函数这辈子是读不到-1这个值的,呵呵
如果改成scanf("%d",&XX);肯定可以读到-1
2011年02月26日 12点02分 3
level 1
只有在无符号数的情况下,才能说没有-1,有符号数的话,0-255中,有一半是负数,当然包括-1的
2011年02月26日 12点02分 4
level 6
ubuntu/linux
ctrl+d 表示结束。即-1.
win
ctrl+c 表结束。
ps
ctrl+z是结束进程。
2011年02月26日 13点02分 5
level 6
getchar得到的是字符。而不是整数
-1表示“-”和“1”
是2个字符。
2011年02月26日 13点02分 6
level 1

while ((c = getchar()) != EOF) {   //遇到文件结束或错误,停止循环
           putchar(c);
      }
如果是从文件中输入,根本就么有什么问题,getchar读到文件尾的时候,就会返回EOF;不过,在终端上,也就是windows下的cmd,linux下的terminal,有不同的规定[我爱牛奶]
windows下 ctrl+Z,表示文件的结束,也就是如果还要从终端上读,就会返回EOF了,
linux下,ctrl+D,表示文件结束;
不管在上面哪个系统下,ctrl+c,都是终止程序运行,[我爱牛奶]还是有区别的、、
2011年02月27日 00点02分 7
1