菜鸟问题

Seffrui_M 2012-11-18 08:38:28
#include<stdio.h>
int main()
{
int c;
while((c=getchar())!=EOF)
{
if(c==' ')
c='\n';
putchar(c);
}
return 0;
}


循环时 不应该先判断是不是EOF 然后执行循环体 但是不应该是我打一个不是空格的 然后输出一个吗 为什么运行结果是这样 还有第二个问题 就是EOF 的用法 为什么有时候按回车就结束 有时候需要ctrl+z啊
...全文
100 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
delong45 2012-11-18
  • 打赏
  • 举报
回复
字符串放入缓冲区,每次读取一个字符输出到屏幕上, 代码中字符为空格的话,就将字符赋值为回车,然后打印,后面继续,就出现你现在的这种输出了
慧钦 2012-11-18
  • 打赏
  • 举报
回复
首先程序确实是先判断输入是否为EOF才执行循环体内的语句的。至于为什么不是你输入一个字符就输出一个,那是因为对于输入系统会设一个输入缓冲区,会先把你输入的字符先存入缓冲区内,直到你输入一个回车符,才会把缓冲区内的字符输出(或者主动清除缓冲区或缓冲区满)。想一想平时我们输入错误为什么能回退删除字符也因为有输入缓冲区的功能才能实现的,不然输入的所有错误字符第一时候就输出了。 第二问题,EOF要是按ctrl+z才会退出的
转角天边 2012-11-18
  • 打赏
  • 举报
回复
每次是只输出一个字符的,你在第一行输入了一句话,这句话会存放在缓冲区,getchar每次从缓冲区读一个字符,然后输出,你单步调试下就明白了
xtianshi00 2012-11-18
  • 打赏
  • 举报
回复
当你输入结束后..按下了回车..程序就开始运行了....速度是很快的所以一下就把结果全部输出了...你当然不可能看到这个一个字符一个字符在控制台打印的过程了...你要是能看到...那CPU待多慢啊.... EOF就是文件结束标志...先不要纠结他...以后的学习你会明白

33,311

社区成员

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

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