我正在研究一个简单的代码,它每秒都会递增一个计数器,并且只有在按下'q'时才会停止递增。
我尝试了getchar()和getline(),但它们要求用户为每个循环输入一个输入。
为了简单起见,这段代码永远依赖控制台,直到我通过(Ctrl + c)终止它,我想用'q'来做同样的功能。
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int j=0;
int main()
{
printf("Enter Q to quit !\n");
while(1)
{
j++;
printf("%d\n",j);
Sleep(1000);
system("cls");
}
return 0;
}
答案 0 :(得分:1)
您加入windows.h
这一事实让我觉得您正在寻找kbhit()
功能。从链接页面:
此功能未定义为ANSI C / C ++标准的一部分。它通常由Borland的编译器系列使用。如果键位于键盘缓冲区中,则返回非零整数。它不会等待按下键。
在UNIX / Linux上,您必须采用终端模式操作,如@i_am_jorf链接的answer所述。
答案 1 :(得分:1)
我发现您使用的是Windows,因此MSVC有kbhit()
或_kbhit()
来检测按键,之后您调用getch()
或_getch()
来获取该按键。
#include <conio.h>
#include <stdio.h>
#include <windows.h>
int main()
{
int j=0;
printf("Enter Q to quit !\n");
do {
j++;
printf("%d\n",j);
Sleep(1000);
} while (kbhit() == 0 || getch() != 'Q');
return 0;
}
为什么while
不会阻止getch
?因为短路评估。如果kbhit == 0
为真,则不评估getch() != 'Q'
。