找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2650|回复: 2

EOF困扰

[复制链接]
john 该用户已被删除
发表于 2014-8-27 23:49:44 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1109

主题

1649

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24180 个
贡献
46222 次
宅之契约
0 份
在线时间
2294 小时
注册时间
2014-1-26
发表于 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
回复 赞! 0 靠! 1

使用道具 举报

1

主题

6

回帖

22

积分

用户组: 初·技术宅

UID
939
精华
0
威望
1 点
宅币
13 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2015-7-4
发表于 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就行。
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-3-28 16:32 , Processed in 0.036473 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表