鱼C论坛

 找回密码
 立即注册
查看: 3399|回复: 15

这句话不懂它的意思!

[复制链接]
发表于 2011-9-18 16:11:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int ch

while((ch=getchar())!=EOF&&ch!='\n')

ch被声明为整数,而事实上需要它来读取字符,这是因为EOF是一个整数值,它的位数
比字符类型的多,把ch声明为整数可以防止从输入读取的字符意外地被解释为EOF

我就不明白怎样意外法?
ch=getchar()每一次读取都是一个字符类型的一般是8位,所以每一次都只是占用ch的8位,而当遇到EOF的整型类型的时候,也只是读取其中的8位给ch才对啊,怎么能意外地解释为EOF?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-18 16:52:35 | 显示全部楼层
本帖最后由 幕府幽魂 于 2011-9-18 17:11 编辑

在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。ch为整形,其也是以字符的ASCII代码值的形式存放,都是ASCII代码的值,难道不容易被识别与比较吗?需要注意的是EOF在C函数库里被定义为-1。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-18 17:17:30 | 显示全部楼层
也有可能意外地读不到EOF。。因为EOF可能不止8位。。这样可能导致无限循环。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-18 18:36:53 | 显示全部楼层
赞同楼上{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
发表于 2011-9-18 19:24:38 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-19 00:06:36 | 显示全部楼层
推荐本书,Cprimer,里面的输入几乎都是这么写的,然后也有很详细的讲解,网上有电子版,或者可以联系我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-19 11:32:09 | 显示全部楼层
楼上的,C primer能否发到我邮箱。。多谢
tsembrace#163.com
:kiss:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-19 21:12:09 | 显示全部楼层

c primer plus 几乎都是用char类型写的。。。。的确有一个地方说过用int类型的区别
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-19 21:13:54 | 显示全部楼层
tsembrace 发表于 2011-9-19 11:32
楼上的,C primer能否发到我邮箱。。多谢
tsembrace#163.com

我发给你,我电脑有这本书 还有课后的答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-19 21:19:59 | 显示全部楼层
tsembrace 发表于 2011-9-19 11:32
楼上的,C primer能否发到我邮箱。。多谢
tsembrace#163.com

已发请查收
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-19 21:22:58 | 显示全部楼层
neur2520 发表于 2011-9-18 19:24
字符串是1个字节,8位,整形是4个字节,16位,这样输入的字符串就不会等于EOF,也就是-1,可能是这个意思吧 ...

嗯嗯 如果把字符串的串 去掉 就是我的意思啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-19 21:24:24 | 显示全部楼层
幕府幽魂 发表于 2011-9-18 16:52
在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数 ...

那getchar()读的是不是一个字符类型的长度啊,怎么会读一个不止8位的EOF并识别它啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-19 21:29:15 | 显示全部楼层

多些芽茶。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-19 21:29:56 | 显示全部楼层
本帖最后由 幕府幽魂 于 2011-9-19 21:38 编辑
吖查 发表于 2011-9-19 21:24
那getchar()读的是不是一个字符类型的长度啊,怎么会读一个不止8位的EOF并识别它啊?


getchar()的返回值是int型的,在文本文件里,是以字符的ascll的值保存的,不是以字符形式保存的,比如A字符,在文本文件里保存的是A的ASCLL码值65。EOR实际上是一个宏,被编译器翻译成-1。你比较65与-1有困难吗?另外,你知道宏是什么意思吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-19 21:50:34 | 显示全部楼层
吖查 发表于 2011-9-19 21:24
那getchar()读的是不是一个字符类型的长度啊,怎么会读一个不止8位的EOF并识别它啊?

getchar()读取的不是字符的长度,C语言读取字符串的长度要用另外的函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-20 18:55:42 | 显示全部楼层
幕府幽魂 发表于 2011-9-19 21:50
getchar()读取的不是字符的长度,C语言读取字符串的长度要用另外的函数。

stdio.h 原来是这样定义的int getchar(void);  明白了
多谢提醒了,懂不懂什么是宏,我就不答了。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-17 05:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表