我写了一个小程序,
int main(int argc, char *argv[])
{
int n;
std::cout << "Before reading from cin" << std::endl;
// Below reading from cin should be executed within stipulated time
bool b=std::cin >> n;
if (b)
std::cout << "input is integer for n and it's correct" << std::endl;
else
std::cout << "Either n is not integer or no input for n" << std::endl;
return 0;
}
从std::cin
阅读被阻塞,因此程序等待,直到程序有外部中断(也像信号)或用户提供一些输入。
如何让std::cin >> n
语句等待用户输入(可能使用sleep()
系统调用)?如果用户没有提供输入,并且在规定时间(比如10秒)结束后,程序应该继续执行下一条指令(即if (b==1)
语句)。
5条答案
按热度按时间35g0bw711#
这对我很有效(注意,这在Windows下不起作用):
gtlvzcf82#
使用标准C或C函数无法做到这一点。
使用非标准代码的方法有很多,但是您很可能不得不处理字符串或单个按键的输入,而不是能够读取像
cin >> x >> y;
这样的输入,其中x
和y
是任何C类型的任意变量。实现这一点的最简单方法是使用ncurses库-特别是在Linux上。
timeout
函数将允许您设置一个超时(以毫秒为单位),您可以使用getstr()
读取字符串,或使用scanw()
读取C scanf样式的输入。hiz5n14c3#
我有个坏消息要告诉你cin不是语句,它是std::istream类型的对象,用于将操作系统默认Map的标准输入文件重新Map到程序的控制台。
阻塞的不是cin,而是在使用空缓冲区读取标准输入时控制台本身调用的控制台行编辑器。
您所要求的是标准输入模型cin应该 Package ,并且不能作为istream功能实现。
唯一干净的方法是使用控制台的本地I/O功能来获取用户事件,并且最终只有在您有一些字符要解析之后才依赖C++流。
huwehgph4#
一个基于c标准的干净的解决方案,它是跨平台的,紧凑的,可重用的c11标准和更新的
wixjitnu5#
可能有用: