我的代码出了问题。实际上,它完美无缺,我只是在寻找更好的解决方案。我做的是这样的事情(它只是整体的一部分,不需要发布其他部分,因为这里只需要它):
#include <windows.h>
int main(){
int a = 0, int b = 3;
while(true) {
a = a * a + b;
Wait(1000);
}
return 0;
}
我想要实现的是能够随时更改变量b
。到目前为止我发现的最佳解决方案是使用getche(),因为它不需要每次都输入,但我仍然需要每次都输入一些东西。完美的解决方案就是:如果用户想要更改b
,他会输入一个新值(只需要一个数字),如果不是,那么循环就会继续。有任何想法吗?我会感激任何帮助!
答案 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;
}