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

#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);
}
则完全复制输入的东西到输出。
原来这两个是不一样的啊。

暮色呼如
浏览 180回答 2
2回答

慕标5832272

条件判断逻辑不一样执行自然不一样,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

哔哔one

第一个你只有1个getchar,只接受一次输入,然后就死循环了第二个是你每getchar一次就判断一次,结束了就退出当然不一样
打开App,查看更多内容
随时随地看视频慕课网APP