按Q退出循环

时间:2016-12-10 20:49:06

标签: c switch-statement

我正在研究一个简单的代码,它每秒都会递增一个计数器,并且只有在按下'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;

}

2 个答案:

答案 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'