Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 清除终端的额外输入_C++_C++11 - Fatal编程技术网

C++ 清除终端的额外输入

C++ 清除终端的额外输入,c++,c++11,C++,C++11,下面是一个示例代码,演示了我面临的问题 #include <iostream> #include <string> extern "C" { #include <unistd.h> } int main() { std::cout << "Making tests ready!" << std::endl; std::cout << "\nTo start out, Enter an integer: ";

下面是一个示例代码,演示了我面临的问题

#include <iostream>
#include <string>
extern "C" {
#include <unistd.h>
}

int main()
{
    std::cout << "Making tests ready!" << std::endl;
    std::cout << "\nTo start out, Enter an integer: ";
    int a = 0;
    std::cin >> a;
    std::string input;
    sleep(3);       // what to do if user enters data during this?
    std::cout << "\n Now enter a string";
    std::getline(std::cin, input);
    std::cout << "\nHere are your values - " << a << " & " << input;
    return 0;
}
#包括
#包括
外部“C”{
#包括
}
int main()
{

Std::CUT< P>阅读评论使我认为你不能真正解决这个问题(至少是通过建议的方法)。在任何情况下都有一个固有的竞争条件。请考虑下面的几行:

sleep(3);       
// (*) <- Potential location 1.
std::cout << "\n Now enter a string";
// (**) <- Potential location 2.
std::getline(std::cin, input);
sleep(3);

阅读这些评论使我认为你不能真正地解决这个问题(至少是在这里提出的方法)。在任何情况下都有一个固有的竞争条件。请考虑下面的几行:

sleep(3);       
// (*) <- Potential location 1.
std::cout << "\n Now enter a string";
// (**) <- Potential location 2.
std::getline(std::cin, input);
sleep(3);

//(*)只需输入所有内容,直到没有更多内容可供阅读。您可以查看是否还有更多内容。@JoachimPileborg,我尝试使用
std::cin.ignore(std::numeric\u limits::max(),'\n');
在我的代码中,但这是为了输入而停止的:/Like cin或getline()停止一些输入。当我尝试输入某些内容时,它再次请求输入(这一次用于实际的getline语句),然后只打印第二次一。这意味着它放弃了我的第一次输入。是否要放弃在特定时间间隔内(例如,当辅助函数运行时)键入的所有内容请注意,这对于终端和终端类输入流来说是有意义的,而不是针对任意文件。C++流库对终端没有特定的功能。OHHH我理解它,在没有额外输入的情况下它要求输入。但是我不知道如何检查是否有额外的输入或不只是。所有的输入,直到没有更多的内容可阅读。你可以查看是否有更多的输入。@JoachimPileborg,我尝试使用
std::cin.ignore(std::numeric\u limits::max(),'\n');
在我的代码中,但这是为输入而停止的:/Like cin或getline()为一些输入而停止。当我尝试输入某个内容时,它再次请求输入(这一次用于实际的getline语句),然后只打印第二次一。这意味着它放弃了我的第一次输入。是否要放弃在特定时间间隔内(例如,当辅助函数运行时)键入的所有内容请注意,这对于终端和终端类输入流来说是有意义的,而不是针对任意文件。C++流库对终端没有特定的功能。OHHH我理解它,在没有额外输入的情况下它要求输入。但是我不知道如何检查是否有额外的输入或NOTIGNORE。竞态条件。假设它永远不会发生。(1)在建议的潜在位置放置清除输入的东西,(2)稍后解决所谓的竞态条件问题。问题是你不能(1),所以(2)是不相关的。嗯,我在搜索这样的东西-1.睡眠后寻找额外的输入->如果有清除它,否则继续。我不关心
(*)
位置,让用户在这里输入任何东西,这不会弄乱用户提示(很少,只有在显示速度很慢的情况下)。我关心
(**)在输入变量之前清除额外输入的位置。“寻找额外的输入”和“清除额外的输入”是很好的小命令。你如何在标准C++中写它们?@ N.M.我想我们是从不同的方向看的。你已经集中在流/ C++方面(很好)。。我关注的是时间方面。我的观点是——即使你能解决它——也会有比赛条件。你上面的评论“忽略比赛条件”表明你的关注点不同。我认为这两个方面都有考虑的余地。你关于“位置1”的推理不依赖于在该点实际清除输入。您只需离开“位置1”空白。不管怎么说,问题都会发生:用户可以在提示出现之前开始键入内容。事实上,如果出现问题,任何交替读取用户输入和打印内容的程序都会出现完全相同的问题。清除输入不会产生任何新问题。忽略竞争条件。假设它永远不会发生。(1) 在你建议的潜在位置放置一些清除输入的东西,(2)稍后解决所谓的竞争条件问题。问题是你不能做(1),所以(2)是不相关的。嗯,我正在搜索这样的东西-1。睡眠后寻找额外的输入->如果有清除它,否则继续。我不在乎
(*)
location,让用户在这里输入任何内容,这不会扰乱对用户的提示(很少,只有在显示速度很慢的情况下才会出现)。我关心
(**)
在进入输入变量之前清除额外输入的位置。“查找额外输入”和“清除额外输入”好的小命令。你如何在标准C++中写它们?@ N.M.我想我们是从不同的方向看的。你把注意力集中在流/ C++方面(很好)。我把重点放在时间方面。我的观点是,即使你能解决它,也会有种族条件。你上面的评论“忽略了竞赛条件”。表示您的关注点不同。我认为这两个方面都有考虑的余地。您关于“位置1”的推理并不取决于此时实际清除输入。您可以离开“位置1”空白。不管怎么说,问题都会发生:用户可以在提示出现之前开始键入内容。事实上,如果出现问题,任何交替读取用户输入和打印内容的程序都会出现完全相同的问题。清除输入不会产生任何新问题。