获取或不是用户输入

时间:2014-05-23 23:34:24

标签: c++

我的代码出了问题。实际上,它完美无缺,我只是在寻找更好的解决方案。我做的是这样的事情(它只是整体的一部分,不需要发布其他部分,因为这里只需要它):

#include <windows.h>

int main(){
    int a = 0, int b = 3;
    while(true) {
        a = a * a + b;
        Wait(1000);
    }
    return 0;
}

我想要实现的是能够随时更改变量b。到目前为止我发现的最佳解决方案是使用getche(),因为它不需要每次都输入,但我仍然需要每次都输入一些东西。完美的解决方案就是:如果用户想要更改b,他会输入一个新值(只需要一个数字),如果不是,那么循环就会继续。有任何想法吗?我会感激任何帮助!

2 个答案:

答案 0 :(得分:3)

C ++标准库未定义非阻塞读取函数。您可以创建一个读取器线程,该线程在读取时阻塞并设置一个正确同步的变量,该变量从另一个计算中读取。不过,我不会追求这个方向。

相反,我会使用某些特定于平台的设置将std::cin设置为非阻止。在UNIX上,您可以使用fcntl()将标准输入流置于非阻塞输入模式:

int flags = fcntl(0, F_GETFL);
fcntl(0, F_SETFL, flags | O_NONBLOCK);

unsigned long count(0);
for (char value(0); !(std::cin >> value) || value != '1'; ) {
    std::cin.clear();
    ++count;
}
std::cout << count << '\n';

答案 1 :(得分:0)

也许是这样的?我还没有测试过这个。

#include <thread>
#include <iostream>

using namespace std;
bool loop;
int a = 0, b = 0;
void multiplication () {
    while(loop) {
        a += b;
        b = 0;
        // wait(1000);
        cout << "a = " << a << endl;
    }
}

int main () {
   loop = true;
   thread myThread(multiplication);
   while(b != -1) {
       cin >> b;
   }
   loop = false;
   cout << "done!" << endl;
}