john 发表于 2014-8-27 23:49:44

0xAA55 发表于 2014-8-28 01:35:45

你的帖子我帮你排了版,现在代码上色了。
我推荐用fread(缓冲区,1,缓冲区大小,stdin);这种方式来读取字符串,这样按下回车就是换行,按下Ctrl+Z再按下回车后fread返回。
另外VS2010和VC6的控制台程序的运行方式有个区别:VS2010是直接运行你的程序,而VC6则是建立一个BAT,运行之后有个pause(提示请按任意键继续)
如果你想要看到程序运行的结果,而不是一闪而过,你可以在main()的最后加上一个system("pause");就行了。system函数在stdlib.h里面,记得包含stdlib.h

hapro 发表于 2015-7-4 23:50:52

本帖最后由 hapro 于 2015-7-4 23:56 编辑

EOF是文件结束符,键盘应该输入不了EOF字符的。getchar、fgets、fread这些都是缓冲输入函数,敲了enter才会接受并处理输入的数据。想退出这个循环,有两个简单的办法:

1、通过fgets(buf, sizeof(buf), stdin)或fread(buf, 1, sizeof(buf), stdin)读入一行输入,判断输入的内容是不是单词,例如quit,exit之类,如果是,就break出循环;
2、通过<stdlib.h>中的无缓冲输入函数getch//有回显 或getche//无回显 来接受输入的任意字符,然后判断是否是特殊字符来决定是否退出,例如ESC,具体数值(好像是0x09)不太确定,你可以打印出来试试。

至于main退出前等待,如前贴所说用system("pause")来运行命令行的pause命令可以,也可以直接使用getch或getche函数来等待用户敲入任意字符,或者直接放一个fgets(buf,sizeof(buf),stdin)来接收个enter就行。
页: [1]
查看完整版本: EOF困扰