为了账号安全,请及时绑定邮箱和手机立即绑定

c != EOF和((c=getchar())!=EOF是不一样的吗?

c != EOF和((c=getchar())!=EOF是不一样的吗?

C
暮色呼如 2022-05-25 13:09:25
#include <stdio.h>main(){int c;c = getchar();while( c != EOF)putchar(c);}执行结果是不停的循环一个字母,根本停不下来。如果把改一下,变成#include <stdio.h>main(){int c;while((c=getchar())!=EOF)putchar(c);}则完全复制输入的东西到输出。原来这两个是不一样的啊。
查看完整描述

2 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

条件判断逻辑不一样执行自然不一样,
int c;
c = getchar();
while( c != EOF)
putchar(c);
首先看这个 EOF是-1的意思 你是用的getchar()比如我们输入一个 (a) 那么int c得到的就是97 为什么是97
应为你是获取一个字符 根据ascii码表对应 a的十进制就是97 接下来我们才看看循环条件
条件是 a != EOF 我刚刚说了EOF代表的是-1 (为什么是-1?这是c用来判断文件指针是否执行到末尾的一个结束标志 可以右键查看EOF 的宏定义 = #define EOF (-1))很明显了

c 现在 = (a)97 != EOF(-1) c = 91 eof = -1 确实是不等于 那么条件成立
输出后在继续判断 c!=eof c还是97并没有改变 还是不等于 就造成了死循环

那么在看第二个代码
int c;
while((c=getchar())!=EOF)
putchar(c);
这里还是一样 输入一个a c = (a)97; 那么在判断条件 而c是(a)97 肯定不等于eof(-1) 那么添加成立 执行输出a
关键点事第二次循环了 输出后又会再次执行条件判断 一看条件是getchar 那么先执行getchar这个c函数 等待输入后
在判断c 是不是不等于eof
所以这个的效果是 没输入一个字符 输出 后在等待输入一个再发 在输出 一直循环直到遇见eof



查看完整回答
反对 回复 2022-05-30
?
哔哔one

TA贡献1854条经验 获得超8个赞

第一个你只有1个getchar,只接受一次输入,然后就死循环了
第二个是你每getchar一次就判断一次,结束了就退出
当然不一样

查看完整回答
反对 回复 2022-05-30
  • 2 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信