如何在C++循环中收集键盘输入

3
我有一个程序在进行数值计算,精度随时间增加而增加。它为一些参数的不同值做这样的计算。我需要的每个结果的精度取决于这些参数的值,但是我完全不知道它们之间的关系。
为了获得每个值的足够精度,我考虑编写一个程序/循环,如果用户按下键盘,它将截断计算并转移到新的参数值。
示意图如下:
//initialise parameters
while( parameters_in_good_range){
     while( no_key_pressed){
         //do calculation
     }
     //update parameters
}

1
你在哪个平台上? - John Zwinck
6
在标准的C++中,无法轮询键盘,您需要依赖于特定于操作系统的函数。 - Mark Ransom
1
@MarkRansom并不完全同意您的观点:自从C++11以来,您可以创建线程并对其进行一些控制,并具备某些基本的同步机制。因此,您可以创建一个执行计算的线程和一个读取标准输入的第二个线程。当第二个线程接收到输入时,它可以告诉另一个线程需要退出。 - Garf365
@JohnZwinck:Linux - Learning is a mess
1
@close-voter:这个问题的意思非常清楚。它说“while(no_key_pressed){/do calculation/}”。 - GreenAsJade
显示剩余2条评论
1个回答

3
在 Windows 上,此程序将循环执行,直到按下键盘按键:
#include <conio.h>

void main()
{
    while (1)
    {
        if (_kbhit())
        {
            break;
        }
    }
}

在Linux上,可以参考这个答案。它告诉你如何使用ncurses来实现你想要的功能。


2
为什么不使用 while(!_kbhit()) {/*do stuff*/} - GreenAsJade
3
没关系,因为OP使用的是Linux而不是Windows。 - Rok
以上已添加了一个关于Linux的答案链接。 - V. Semeria
@V.Semeria,仅提供链接是不够的,除非它实际包含相关信息,否则它不算作答案。 - Mark Ransom
它包含一个解决问题的ncurses示例。 - V. Semeria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接