大家分析一下,代码为什么非得输入两次EOF!程序结束!

qianyinggaozhong 2012-10-23 06:25:02
#include <stdio.h>
#include <stdlib.h>

void main()
{
FILE *fp;
char ch, filename[20];

printf("Please input the filename you want to write:");
scanf("%s", filename);

if(!(fp = fopen(filename, "wt")))
{
printf("Cannot open the file!\n");
exit(0);
}

printf("Please input the sensentence you want to write:");
ch = getchar(); //接受回车的符
ch = getchar(); //接受输入的第一个字母

while(ch != EOF)
{
fputc(ch, fp);
ch = getchar();
}

fclose(fp);
}
...全文
395 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
翔宇2012 2013-03-18
  • 打赏
  • 举报
回复
我觉着这是编译器的问题,因为在VC++6.0里会出现上述问题,但是在TC里面就不会出现类似问题!对于上述在VC里的问题,我支持gaohua;id的说法!
AnYidan 2012-10-29
  • 打赏
  • 举报
回复
windows认为,如果缓冲中还有其它内容,ctrl+z不表示输入结束,仅代表当前行输入结束,只在单独一个ctrl+z的时候才表示输入结束。
xurui92 2012-10-29
  • 打赏
  • 举报
回复
结贴是什么??我新手。。
搬砖随想录 2012-10-29
  • 打赏
  • 举报
回复
亲,你倒是结一下贴啊。。
qianyinggaozhong 2012-10-25
  • 打赏
  • 举报
回复
我的输入是zhangCtrl+Z回车
然后输入Ctrl+Z回车才能结束,我想问问这两次的Ctrl+Z的意义!
搬砖随想录 2012-10-25
  • 打赏
  • 举报
回复

1.EOF作为文件结束符时的情况:
EOF虽然是文件结束符,但并不是在任何情况下输入Ctrl+D(Windows下Ctrl+Z)都能够实现文件结束的功能,只有在下列的条件下,才作为文件结束符。
(1)遇到getcahr函数执行时,要输入第一个字符时就直接输入Ctrl+D,就可以跳出getchar(),去执行程序的其他部分;
(2)在前面输入的字符为换行符时,接着输入Ctrl+D;
(3)在前面有字符输入且不为换行符时,要连着输入两次Ctrl+D,这时第二次输入的Ctrl+D起到文件结束符的功能,至于第一次的Ctrl+D的作用将在下面介绍。
其实,这三种情况都可以总结为只有在getchar()提示新的一次输入时,直接输入Ctrl+D才相当于文件结束符。

2.EOF作为行结束符时的情况,这时候输入Ctrl+D并不能结束getchar(),而只能引发getchar()提示下一轮的输入。
这 种情况主要是在进行getchar()新的一行输入时,当输入了若干字符(不能包含换行符)之后,直接输入Ctrl+D,此时的Ctrl+D并不是文件结 束符,而只是相当于换行符的功能,即结束当前的输入。以上面的代码段为例,如果执行时输入abc,然后Ctrl+D,程序输出结果为:
abcabc
注意:第一组abc为从终端输入的,然后输入Ctrl+D,就输出第二组abc,同时光标停在第二组字符的c后面,然后可以进行新一次的输入。这时如果再次输入Ctrl+D,则起到了文件结束符的作用,结束getchar()。

如果输入abc之后,然后回车,输入换行符的话,则终端显示为:
abc //第一行,带回车
abc //第二行
//第三行
其中第一行为终端输入,第二行为终端输出,光标停在了第三行处,等待新一次的终端输入。
从这里也可以看出Ctrl+D和换行符分别作为行结束符时,输出的不同结果。

EOF 的作用也可以总结为:当终端有字符输入时,Ctrl+D产生的EOF相当于结束本行的输入,将引起getchar()新一轮的输入;当终端没有字符输入或 者可以说当getchar()读取新的一次输入时,输入Ctrl+D,此时产生的EOF相当于文件结束符,程序将结束getchar()的执行。
搬砖随想录 2012-10-23
  • 打赏
  • 举报
回复
不用输两次啊,你要在新的一行输入,例如在windows下应该这样输入
hello
^Z //在新的一行开头输入Ctrl+Z

70,025

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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