下面的代码期望用户在每个循环中键入一个字符。如果我要继续运行此循环,而用户不必在每个循环中输入任何字符,直到输入数字0,我该如何实现。
#include<iostream>
int main()
{
int i = 1;
int ch = 1;
while (ch != 0)
{
std::cin >> ch;
std::cout << "Hi" << i << std::endl;
++i;
}
return 1;
}
答案 0 :(得分:3)
线程化是您唯一的可能性。当您使用std :: cin时,也总是需要ENTER键。这可能有效:
#include <future>
#include <iostream>
#include <thread>
int main(int argc, char** argv) {
int i = 1;
std::atomic_int ch{1};
std::atomic_bool readKeyboard{true};
std::thread t([&ch, &readKeyboard]() {
while (readKeyboard) {
int input;
if (std::cin >> input) {
ch = input;
if (ch == '0') {
break;
}
}
}
});
while (ch != '0') {
std::cout << "Hi" << i << std::endl;
++i;
}
readKeyboard = false;
t.join();
return 1;
}
答案 1 :(得分:1)
您可以执行此操作,但必须使用线程。这是如何实现此行为的最小示例。请注意,您至少需要C ++ 11。
#include <iostream>
#include <thread>
#include <atomic>
int main()
{
std::atomic<bool> stopLoop;
std::thread t([&]()
{
while (!stopLoop)
{
std::cout << "Hi";
}
});
while (std::cin.get() != '0') //you will need to press enter after pressing '0'
{
; //empty loop, just wait until there is 0 on input
}
stopLoop = true; //this stops the other loop
}
其他选择是进入特定于操作系统的库。现在,您必须确保C ++在标准库中没有任何类型的非阻塞I / O,并且大多数时候您必须按<ENTER>
才能在输入流(std :: cin)中输入任何内容>