| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2982 人关注过本帖
标题:有没有像kbhit()的非阻塞函数
取消只看楼主 加入收藏
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
有没有像kbhit()的非阻塞函数
最近在捣鼓多线程,设置了一个线程负责读取用户的输入,有一个问题是不知道用户输入了一个整数还是两个,如果用scanf的话可能会一直等待。希望有一个像kbhit()的,没有输入了的话就不等了直接返回。
搜索更多相关主题的帖子: 多线程 用户 
2012-04-09 18:32
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:0 
回复 2楼 beyondyf
不是那样,首先要判断用户有没有输入,有输入的话要把用户的输入全部读取,不能遗漏,也不能多读(比如用户只输入了两个,你认为有三个,那就会一直等)
版主的那个方法也可以解决这个问题,但是要写很多代码,不方便维护,因为输入的数据可能有很多种,差不多是自己再写一个scanf了,除非sscanf可以让指针后移,那就可以判断有没有读完。可能是我的经验不足,没想到好一点的方法?

酱油实习生
2012-04-09 21:13
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:0 
好吧,我试一下能不能说明白……
有一个程序是多线程的,用户在使用的时候会输入几组的数字。过一段时间程序就要接收一次用户的输入。如果用户每次输入端数字个数都是固定的就可以直接用scanf来读取,但是如果不确定,那么就要保证一次读取完,不多也不少。比如用户输入了3个,我不能只读两个;如果我用scanf读取四个的话,虽然都三个读进了,但是scanf还要等用户再输入一个才返回,这样也不行。
偶然间看到kbhit()这样的函数,因此就想有没有一个读取函数,读取时先检查缓冲区,有数据就读取,没有就返回,不像scanf要等用户输入一个。
这个要求应该可以用其他的方法实现,比如读取前自己检查缓冲区等等。但是我想知道不用这种办法和正则表达式能不能解决,毕竟创新思维和视野很重要。
麻烦啦

酱油实习生
2012-04-10 18:51
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:0 
回复 8楼 小鱼儿c
特殊字符?可是我不想这样要求使用者……

酱油实习生
2012-04-13 19:46
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:0 
回复 10楼 TonyDeng
我也不知道该怎么说了

酱油实习生
2012-04-14 12:20
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:0 
回复 11楼 我菜119
好复杂啊,不过试一下吧,也许其他地方会用到,谢谢

酱油实习生
2012-04-14 12:21
快速回复:有没有像kbhit()的非阻塞函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012390 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved