C++getch()函数()函数读两次?

C++ while(kbhit())getch();_百度知道
C++ while(kbhit())getch();
在一个cin.getline()之前,为了防止之前的输入影响,我加入了while(kbhit())getch();这样一行语句,但是为何cin.getline()还是直接被跳过了?...
在一个cin.getline()之前,为了防止之前的输入影响,我加入了while(kbhit())getch();这样一行语句,但是为何cin.getline()还是直接被跳过了?
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
kbhit()只是检查当前有没有键盘输入
也就是运行到while(kbhit())的时候检查有没有键盘输入 如果有 getch(); 没有就过去了 这应该不影响cin.getline(); int main(){
char s[80];
system(&pause&);
while(kbhit())
cin.getline(s,80);
system(&pause&);
return 0;}结果:请按任意键继续. . .sdfsdfsdfsdf请按任意键继续. . .如果还是直接跳过,请附上详细代码
如果在system(&pause&);前面加一个cin&&s;后面的cin.getline();就直接跳过了char q[100];cin&&q;while(kbhit())getch();cin.getline(q,100);cout&&q;-------------------运行结果:cin 输入1234cin.getline()被直接跳过输出空串(调试发现q为&&)
#include&iostream&//#include&curses.h&#include&conio.h&int main(void){
char q[100],
int n=-100;
cin&&q;//
cin.sync();//清空缓冲流
while(n=kbhit())
ch=getch();
cout&&n&&&kbhit返回值&&&
//
cin.sync();//清空缓冲流
cin.getline(q,100);
return 0;}注释掉的两行 可任意恢复其中一行程序即能正常
总结缓冲区内遗留空格或回车导致
缓冲区内遗留的空格或回车不是应该会被getch么?为什么还会留下来呢?
额 小可表示这个有待深究 只能帮到这里了 以前做的时候 printf(); char c=getchar();
这样的程序行
在printf(); 后还要加 getchar();吃掉回车
现在也是不大清楚
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。C++中getch()是什么意思_百度知道
C++中getch()是什么意思
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
采纳数:39
获赞数:289
所在头文件:conio.h
函数用途:从控制台读取一个字符,但不显示在屏幕上
函数原型:int getch(void)
返回值:读取的字符
例如: 或int ch;
getch();或ch=getch();
用getch();会等待你按下任意键,再继续执行下面的语句;
用ch=getch();会等待你按下任意键之后,把该键字符所对应的ASCII码赋给ch,再执行下面的语句。
易错点:所在头文件是conio.h。而不是stdio.h。
采纳数:41
获赞数:103
getchar();---------------------getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.-----------------------------程序将等待你输入字符所以会停下来
本回答被提问者采纳
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。为什么我在C++中包含stdio.h后还是不能使用system()\getch()和exit() 函数
本回答由提问者推荐
var sogou_ad_id=731547;
var sogou_ad_height=160;
var sogou_ad_width=690;C++ getch()函数如何清空缓存_百度知道
C++ getch()函数如何清空缓存
Sleep(100);getch();cout&&&HelloWorld&;如果在Sleep(100)的过程中碰到了键盘,那么过程结束后直接&HelloWorld&就蹦出来了,getch()没有起效果...问下能不能在getch()前加什么东西,让...
Sleep(100);getch();cout && &Hello World&;如果在Sleep(100)的过程中碰到了键盘,那么过程结束后直接&Hello World&就蹦出来了,getch()没有起效果...问下能不能在getch()前加什么东西,让getch()的缓冲区清空,然后才开始读输入呢?
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
  getch()函数描述:  所在头文件:conio.h  函数用途:从控制台读取一个字符  函数原型:int getch(void)  返回值:读取的字符  例如:  或int ch;  getch();或ch=getch();  用getch();会等待按下任意键,再继续执行下面的语句;  用ch=getch();会等待按下任意键之后,把该键字符所对应的ASCII码赋给ch,再执行下面的语句。  清空方法如下:  std::clear()  cin.clear();
#include&&iostream&using&namespace&#include&&conio.h&#include&&windows.h&int&main(){ cout&&&&&延时3秒\n&&; Sleep(3000);
while&(kbhit())&&&&&&&&//&检查是否有按键 {&&&&
getch()&;&&&&&&//...读取流中字符 }&&&&&&&&&&&&&&&&&&&//&&按键多少次,就读取多少次
cout&&&&&按键继续\n&&; getch(); cout&&&&&Hello&World\n&;
return&0&;}
本回答被提问者采纳
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。在C++里如何在程序执行时按一下空格停止,然后按一下空格继续执行?如何实现按下ctrl+c后重新运行程序?_百度知道
在C++里如何在程序执行时按一下空格停止,然后按一下空格继续执行?如何实现按下ctrl+c后重新运行程序?
在做解析IP数据包,请问在C++里如何在程序执行时按一下空格停止,然后按一下空格继续执行?如何实现按下ctrl+c后重新运行程序?请给出代码和例子...
在做解析IP数据包,请问在C++里如何在程序执行时按一下空格停止,然后按一下空格继续执行?如何实现按下ctrl+c后重新运行程序?请给出代码和例子
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
I_everything
来自电脑网络类芝麻团
I_everything
采纳数:24
获赞数:50
参与团队:
#include&&stdio.h&#include&&conio.h&void&DoWork(){&&&&printf(&Hello&world!\n&);}int&main(){&&&&int&k;&&&&while(1)&&&&{&&&&&&&&DoWork();&&&&&&&&if(kbhit())&&&&&&&&{&&&&&&&&&&&&k=getch();&&&&&&&&&&&&if(k=='&')&&&&&&&&&&&&{&&&&&&&&&&&&&&&&while(1)&&&&&&&&&&&&&&&&if(kbhit()&&&&getch()=='&')&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&else&if(k==27)//ESC&&&&&&&&&&&&&&&&&&&&&&&&}&&&&}&&&&return&0;}这个样例是一个程序不断输出hello world,按下空格后暂停输出,暂停后只有按下空格才能恢复。按下ESC后退出。不过ctrl_c重新运行有点困难。。ctrl_c通常会使程序中断。虽然getch()能截断ctrl_c的指令,使程序不会中断。但是在和kbhit()组合使用时发现kbhit()之后的第一个getch()不能截断ctrl_c的指令。目前我还没想到什么好的方法。。。kbhit()函数一般来说用来检测是否有按键按下,否返回0,是返回非零值。不过严格说并不是&检测是否有按键按下&,你可以自己把这个函数和常规的输入输出函数scanf等组合使用来探究一下。另外kbhit()只是检测并不会将按键信息消除,使得和getch()的组合成为可能。getch()获取当前按下的键,返回值是一个整型,可以用int来接收。你可以自己写个简单的程序,按下键后输出getch()的返回值,来查看每个键分别对应着哪个值。貌似用的是ASCII码。这个测试程序直接贴一个给你好了。。#include&&conio.h&#include&&stdio.h&int&main(){&&&&int&&&&&while(1)&&&&{&&&&&&&&key=getch();&&&&&&&&printf(&%d\n&,key);&&&&}}哦对了。。kbhit()和getch()两个函数都包含在conio.h中
采纳数:91
获赞数:292
楼上两位都会让程序阻塞,getch()和pause都是阻塞语句,程序只会一直停着等待键盘输入。要做你说的这个功能只能新建一个线程,把你原来的功能放到新线程里,主程序里只要开始这个线程,然后getch(); 第一次收到的时候suspend你的工作线程,第二次再resume
赶紧撸毅管
赶紧撸毅管
采纳数:182
获赞数:367
空格控制停止继续,最简单的就是线程控制,至于ctrl+C的话,注册信号:#inlude &signal.h&程序里面注册
signal(SIGINT,yourfunc);yourfunc就是你的控制函数。
liulcsy_BCG
liulcsy_BCG
采纳数:339
获赞数:935
控制台下:printf(&test\n&);
if (!getch()) getch();
看不懂,能不能解释一下?或者给你程序,帮我改一下?
你建一个控制台的程序,用C++建。然后把这代码填进去就行了。getch()可以实现按下空格往下走的功能
来自电脑网络类芝麻团
采纳数:71
获赞数:224
参与团队:
我记得system(&pause&)可以做到这一点,你试试
那个是程序自己停止的,我想要的是从键盘按按一下空格停止,然后按一下空格继续执行的那种。system(&pause&)可以实现吗?
其他2条回答
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 _getch()函数 的文章

 

随机推荐