不等待回车,读取控制台输入多个数字

wzw12315 2009-07-23 09:31:14
在很多情况下,我们希望在控制台下,按键盘一个或几个字符,程序马上反应而不是等待回车后才响应

如何能够不等待回车,读取控制台输入多个数字


但getche getch getc getchar几个函数的都是读取一个字符,而且读取数据时输出的不是数字,

请问如何如何能够不等待回车,读取控制台输入多个数字,使其与预设值进行比较,例如加减的结果等等,但有时结果不一定是一位的,如何实现多为输入呢?
...全文
451 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
nobody@noone 2009-07-31
  • 打赏
  • 举报
回复
getch(),自己写循环
庄鱼 2009-07-31
  • 打赏
  • 举报
回复
一个相对完整的版本
const int MaxLen = 20;
double exp10(int N)
{
double num=1.0;
if(N>0)
for(int i=0;i<N;i++)num *=10;
if(N<0)
for(int i=0;i>N;i--)num /= 10;
return;
};
double GetNum()
{
bool sng=false,dec=false,efalg=false,esng=false,eop=false;
char c;
double n=0,m=1.0;
int e = 0;
for(int i=0,j=0;i <MaxLen;i++)
switch(c=getche()){
case '0':case '1':case '2':case '3':case '4':
case '5':case '6':case '7':case '8':case '9':
if(eflag){e *=10;e+= c-'0';j++;break;}
if(!dec){n *=10; n+=c-'0';}
else{m*=10;n+= (c-'0')/m;}
break;
case '.':if(eflag)goto Done;if(dec)goto Done;else dec=true;break;
case 'e':case 'E':if(eflag)goto Done;eflag=true;break;
case '-':case '+':if(i && eflag){
if(j ||esng)goto Done;
esng=true;
if(c=='-')eop=true;}
else {
if(sng)goto Done;
if(c=='-') n = -n;
sng=true;break;}
default:goto Done;};
Done:
if(e){
if(eop)e = -e;
n = n*exp10(e);}
return n;
};
ysysbaobei 2009-07-28
  • 打赏
  • 举报
回复
顶下
庄鱼 2009-07-28
  • 打赏
  • 举报
回复
const int MaxLen = 20;
double GetNum()
{
bool sng=false,dec=false;
char c;
double n=0,m=1.0;
for(int i=0;i<MaxLen;i++)
switch(c=getche()){
case '0':case '1':case '2':case '3':case '4':
case '5':case '6':case '7':case '8':case '9':
if(!dec){n *=10; n+=c-'0';}
else{m*=10;n+= (c-'0')/m;}
break;
case '.':if(dec)goto Done;else dec=true;break;
case '-':case '+':if(sng)goto Done;else sng=true;break;
default:goto Done;}
Done:
return n;
}
积极的猫咪 2009-07-27
  • 打赏
  • 举报
回复
你可以使用getch()这个函数,它是不需要使用回车就可以直接接受的,我以前在做DOS界面下的一个课程设计的时候就用到了这个函数,应该是包含在conio.h这个头文件中的,你用得时候直接包含头文件就可以了,但是你要注意,如果你用getch()为字符串赋值的时候(当然这个时候要用到循环)不要忘记了在字符串的最后加上'/0',就像下面那样:
char denglu[20];
while((a=getch())!='\r')
{
mima[j]=a;
cout<<"*";
j++;
}
当然做程序我只是给你一个思路而已,估计和你所说的不太一样,但是至于转换成数值型,你可以用一个函数atoi()转换,一下。
mima[j]='\0';
ho121 2009-07-24
  • 打赏
  • 举报
回复
错了
没有int c;
ho121 2009-07-24
  • 打赏
  • 举报
回复
多次getche()不行么?


int c;
for(int c = 0; c != 10; ++c){
getche();
}
密斯刘 2009-07-24
  • 打赏
  • 举报
回复
呵呵 必须判断字符串的内容啊 这样代码就长咯
thinkboy234 2009-07-24
  • 打赏
  • 举报
回复
学习。。。
J-ohnson 2009-07-24
  • 打赏
  • 举报
回复
getch(),只能这样了,…………
飞天御剑流 2009-07-23
  • 打赏
  • 举报
回复
请问如何如何能够不等待回车,读取控制台输入多个数字,使其与预设值进行比较,例如加减的结果等等,但有时结果不一定是一位的,如何实现多为输入呢?
----------------------------------------------------------
你这需求,用我们广州人的俗语来说,就是又反动又怕死。

输入数字的时候,必须告诉计算机输入结束何时结束,例如你想输入1234,你不给计算机一个结束的信号,它怎么知道你是输入到3结束还是到4结束呢?

即使使用非缓冲输入输出函数例如getch这一类也必须通过某种方式告诉计算机你结束输入了。
hoomey 2009-07-23
  • 打赏
  • 举报
回复
用gets吧
读字符串,然后再解析,计算
wzw12315 2009-07-23
  • 打赏
  • 举报
回复
不会,比如说答案是3位数字的,我用getche()的话,输入第一个数字程序就把第一个数字输入了当做结果,而后面的
数还没输进去,程序以往下执行了。如何让全部数据输入而不需要回车呢
taodm 2009-07-23
  • 打赏
  • 举报
回复
呃,还是用用图形界面gui编程吧。
hoomey 2009-07-23
  • 打赏
  • 举报
回复
如果只输入一个,库函数就够了
输入多个,必须要有结束标志,不然没法判断输入结束啊
大前置 2009-07-23
  • 打赏
  • 举报
回复
一个个字符输入,程序按规则组装数据

目前没发现有现成的库函数
晨星 2009-07-23
  • 打赏
  • 举报
回复
那就只能是自己getche,然后自己根据输入来动态的解析。
akira88 2009-07-23
  • 打赏
  • 举报
回复
数字可能不是一位,怎么判断终止呢?
linxiao0218 2009-07-23
  • 打赏
  • 举报
回复
不懂啊。郁闷

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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