gpt4 book ai didi

c++ - 如何在 C++ 中故意跳过 cin?

转载 作者:太空宇宙 更新时间:2023-11-04 14:13:00 25 4
gpt4 key购买 nike

我需要运行一个 while 循环并在有输入时接受输入。我对 C++ 并不陌生,但这个障碍相当困难。由于保密协议(protocol)(这个学校项目显然是一些 secret 的东西)我只能给你看测试用例。

我一直在寻找解决问题的救命稻草;尝试捕捉、cin.get、cin.peek、if(cin.peek){}。如果有人能指出正确的方向,我将不胜感激!

该程序对时间要求不高,但需要以固定的时间间隔调用一个函数。代码的可移植性、while-cin 组合或类似的东西并不重要;该代码只能在至少具有双核处理器的 Windows 7 或 Windows 8 PC 上运行。

#include <iostream>
#include <ctime>

using namespace std;

int main()
{
int input = 0;
int pastTime, nowTime;
pastTime = nowTime = time(0);

cin >> input;
while(input != -1)
{
if(input == 1)
{
cout << "Entered 1" << endl;
//To be done instead of the two 'elses',
//bypassing interval-dependant code
}
else if(input == 2)
{
cout << "Entered 2" << endl;
//To be done instead of the interval-dependant code
}
else if(pastTime == (nowTime - 5))
{
cout << "Nothing entered." << endl;
//Needs to be done with a fixed interval.
}
nowTime = time(0);
cin >> input;
}
return 0;
}

解决方案是,基于 James Beilby 的链接:

// This program is based on counter.cpp from Boost\lib\thread\tutorial

#include <boost/thread/thread.hpp>
#include <iostream>
#include <ctime>

int timeNow = time(0);
int timePast = time(0);

void fct_one()
{
while(1) //keeps running all the time
{
if(timePast == (timeNow - 3)) // only executed once every three seconds
{
//do some stuff
timePast = time(0);
}
timeNow = time(0); // time is continuously updated
}
}

void fct_two()
{
int input = 0;
int timeTemp = time(0);
while(1) //keeps running all the time
{
std::cin >> input; // cin blocking for input
if(input == 1)
{
//do some stuff
}
if(input == 2)
{
//do some stuff
}
if(input == -1)
{
std::cout << "Program is done. ";
system("pause");
exit(1);
}
}
}

int main()
{
boost::thread_group threads;
threads.create_thread(&fct_one)
threads.create_thread(&fct_two);
threads.join_all();
return 0;
}

最佳答案

我会将读取输入与 cin 和执行默认超时功能完全分开。您将需要类似后台线程的东西,它根据时间间隔执行默认功能。要处理前两种情况,您需要向线程发出信号以跳过下一次执行(如果确实有必要),并且只需调用您想要的任何函数或什么也不做。

关于c++ - 如何在 C++ 中故意跳过 cin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13276363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com