鱼C论坛

 找回密码
 立即注册
查看: 3539|回复: 18

大家好!我是新手,有个新手问题请教高手

[复制链接]
发表于 2012-4-6 07:50:27 | 显示全部楼层 |阅读模式

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

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

x
C=getchar()!=EOF 怎么理解?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-6 08:45:43 | 显示全部楼层
坐等版主来!~
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-6 08:59:42 | 显示全部楼层
谢谢楼上,我去网上查了,算是理解了吧
这问题让我很纠结,对EOF很陌生,也不了解Ggetchar()函数
查看网上额讲解,我的理解是:
getchar()等待用户输入,按下ENTER后,生成了按键码,getchar()每次读取一个按键码,其中也包括ENTER的按键码13,若果这么写 while(getchar()!=13){} 那么逐个读取全部的字符,当读取到13上,循环结束。或是(getchar()!=‘、n’){} 也是同样的效果。
我查看了EOF的返回值,一般状况下都等于-1
而 while((getchar()!=EOF){} 中EOF也是等于-1,单文件未读完的时候,EOF等于-1,当流文件读取到末尾,包括读完ENTER按键码,就会变成1.while((getchar()!=EOF){} 永远货循环,因为getchar()读取都ENGTR时,此函数又会要求用户输入,所以流文件永远读不到EOF

不知道对不对?
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-6 09:06:48 | 显示全部楼层
为什么一定要用EOF呢,未魏布斯还有0吗,如果改写陈while(getchar()!=0)效果也是一样,不断的循环,或是改成其他不可能相等的数字,getchar还是会不断的循环,也没报错。EOF的作用是什么
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-6 09:15:18 | 显示全部楼层
( C=getchar() ) !=EOF
你可以这么理解
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-6 09:17:04 | 显示全部楼层
EOF一般是-1表示文件结束。表达式的意思应该是文件结束符之前的字符都可以赋给变量C吧
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-6 09:47:22 | 显示全部楼层
本帖最后由 湮汐 于 2012-4-6 09:50 编辑

其实楼上几位都说的蛮好的了,如同5楼所说,( C=getchar() ) !=EOF这样理解是对的。
getchar的功能是:若缓冲区满或者用户按下回车键,就从缓冲区读入一个字符,如果是while(c=getchar()),那么就会从缓冲区连续不断的读入字符。 "!="是逻辑运算符,表示 不等于 。另外 EOF,在这里不是指三个字母EOF,这里是一个特殊字符。更精确地说成C标准函式库中表示文件结束符(end of file)。你也可以换成其他的任意字符,例如'#','*',这些都可以。我们知道,字符一般是用int型储存到内存中的,而且是按照ASCII表来存储的,但是ASCII表的范围是0~127,而且就算是扩展之后的字符常用表也是0~255,不可能出现负数。EOF的值,则是-1,所以一般情况下不会输入EOF,所以用EOF这个字符判断结束是很好的方法。
至于EOF如何输入,在 Linux上的输入方法是 ctrl+D,在 windows上的输入是ctrl+Z
希望对楼主有作用!
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-6 10:06:07 | 显示全部楼层
谢谢大家
再问下:
( C=getchar() ) !=EOF这表达式是逻辑运算吗?
前面一个等号与后面一个等号都是返回true或是FLASE吗?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-6 10:17:00 | 显示全部楼层

前面一个=是赋值,把getchar读入的字符,复制给C,后面的是 != 这个是逻辑运算符,判断是否不等于,若C不等于 EOF,返回1,若C等于EOF返回0
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-6 10:25:02 | 显示全部楼层
湮汐 发表于 2012-4-6 10:17
前面一个=是赋值,把getchar读入的字符,复制给C,后面的是 != 这个是逻辑运算符,判断是否不等于,若C不 ...

这是对我观念的冲击
以前没接触过这样的句子
比如我我写了这么一句
(c=1)!=1前面应该是赋值吧

在C语言中变量后跟着函数,在任何地方都可以赋值吗
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-6 10:26:36 | 显示全部楼层
如果我不搞懂观念上的东西,以后会影响的学习
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-6 10:33:56 | 显示全部楼层
c=((c=(c=(c=c+1)++)++)+++1)
谢谢楼上,我自己编了这么个句子,然后就看懂了
除了这个++外,好像不同于VB
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-6 10:38:07 | 显示全部楼层
C语言让我豁然开朗
原来 c=1是等同于c=0;c=(c=c+1)
=是等同于+—*/的
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-6 10:42:17 | 显示全部楼层
谢谢你们
我原来是纠结在=上了
c=0
printf(%d,c++)我可以理解
但是
printf(%d,c=c+1)却无法理解
现在终于明白了
可能很多智商高的人,一看就理解了
有时候观念真的很可怕
一直以为=不同于+——*/
在编程中=也是决定变量的运算符
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-6 10:48:12 | 显示全部楼层
=是赋值符号  ==是逻辑运算符号
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-6 10:48:26 | 显示全部楼层
:lol
上面不是 C++,而应该改++c
不然不会等同于c=c+1
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-6 10:52:02 | 显示全部楼层
幕府幽魂 发表于 2012-4-6 10:48
=是赋值符号  ==是逻辑运算符号

我现在明白了,任何运算符号都会生成指令,被CPU运算,包括这个=
然后结果返回变量,无论表达式里有几个运算符,都会被编译器处理成指令
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-6 11:05:39 | 显示全部楼层
:'(:'(承蒙各位的观点,吾受益匪浅!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-7 12:54:03 | 显示全部楼层
:o     :dizzy:
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-12 15:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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