EOF的值为什么很大?

pestpatrol 2005-09-09 06:42:04
int c;
c=getchar();
while(c!=EOF)
{putchar(c) ;
c=getchar();
}
书上写到这里之所以不把c声明为char类型因为他必须足够大,除了能够存储任何字符外还要能存储文件结束符EOF.因此将c申明为int型

后来书上有一道习题是打印EOF的直~~
printf("%d",EOF);

运行结果为-1
并不大呀!char好歹也能放一个字节~为什么在这里他连-1都放不下?:(
...全文
344 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
guanlicome 2005-09-11
  • 打赏
  • 举报
回复
Eof并不是确定值,为文件的终止符。输入时为ctrl+z
A_E_Shaw 2005-09-11
  • 打赏
  • 举报
回复
在很多系统中EOF的值都是-1,但是你用%d显示它的话就只能看到-1,如果你用%X格式符再试试,就会发现显示出来的结果是FFFFFFFF(在Visual C++ 6.0环境下),这是因为在计算机里负整数是以“补码”的形式保存的(关于“原码”、“反码”、“补码”的概念此处不再赘述),所以看上去很小的一个“-1”,却要占用32个二进制位,这确实是char这个数据类型无法容纳的。
(不过,char类型却也能显示“自己的”-1,即FF,而且会显示成FFFFFFFF,这又是因为机器对补码补位造成的结果。也就是说对机器内部而言:char当中存放的-1实际上是FF,而EOF实际上是FFFFFFFF,这显然是不同的。)
另外,在不同的系统当中,EOF的值也未必就是-1,但总之它不是一个在char类型取值范围内的数。
wanguodu 2005-09-09
  • 打赏
  • 举报
回复
啊,不好意思发错地方了。
wanguodu 2005-09-09
  • 打赏
  • 举报
回复
很久没有看到乔生大哥了,好怀念他呀!
snow_yb 2005-09-09
  • 打赏
  • 举报
回复
这段代码好像不能结束,好像EOF是变的。
我记得写的时候,写-1还是没有停止。
谁能告诉我???
pestpatrol 2005-09-09
  • 打赏
  • 举报
回复
回复人: snowbirdfly(胡晋)
越搞越不明白了....
我学C没几天啊...

什么叫标志值??
megaboy 2005-09-09
  • 打赏
  • 举报
回复
幸好看到这一贴的时候没吃饭,否则就给“嘁”死了........(找不到那个字,只好用这个字了,:()
snowbirdfly 2005-09-09
  • 打赏
  • 举报
回复
上面你不是写了吗?
char类型因为他必须足够大,除了能够存储任何字符外还要能存储文件结束符EOF.
所以把它定义为整形~
输入字符对应值有不可能是负数~
所以就定义成-1作为EOF这个标志值~~
我觉得你还没有理解上面的意思~~~
正是因为char类型因为他必须足够大,所以后来定义为-1.
并不是说char连-1都放不下~~
你再想一想~~
kittig 2005-09-09
  • 打赏
  • 举报
回复
在dev c++的stdio.h中的声明:
_CRTIMP int __cdecl getc (FILE*);
_CRTIMP int __cdecl putc (int, FILE*);
_CRTIMP int __cdecl getchar (void);
_CRTIMP int __cdecl putchar (int);

因为getchar返回的是int类型的值,所以把c声明为int型了。
其实好像char也可以吧。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧