C++ “你怎么看?”;按ENTER键继续,其他任何键退出;在C++;

C++ “你怎么看?”;按ENTER键继续,其他任何键退出;在C++;,c++,C++,对不起,我肯定这个问题被问了一百万次。我已经搜索过了,我找到了“按回车键继续”的答案,但就我而言,我找不到我问题的答案 do{ //something something cout<<"Press ENTER to continue or anything else to quit."<<endl; //Enter is pressed or something else }while(Enter is pressed) do{ //什么东西 cout

对不起,我肯定这个问题被问了一百万次。我已经搜索过了,我找到了“按回车键继续”的答案,但就我而言,我找不到我问题的答案

do{
   //something something
   cout<<"Press ENTER to continue or anything else to quit."<<endl;
   //Enter is pressed or something else
}while(Enter is pressed)
do{
//什么东西

cout首先,当您这样做流媒体时(添加错误处理)

如果您希望仔细检查所有内容,可以使用
std::getline(std::cin,line)
将输入行读入
std::string
,然后用它构造一个
std::stringstream
,然后解析出如下内容:

std::string line;
if (cin>>list[n].firstName>>list[n].lastName>>list[n].age))
{ 
     std::istringstream iss(line);
     if (!(iss >> firstName >> lastName >> age))
     {
        std::cerr << "oops... unable to parse `firstname lastname age' from stdin... terminating\n";
        return EXIT_FAILURE;
     }

     char c;
     if (iss >> c)  // this should fail - no more non-whitespace content allowed...
     {
        std::cerr << "oops... extra input encountered after the age value... terminating\n";
        return EXIT_FAILURE;
     }
}
这样,任何换行符都将自动从流中删除。使用
std::cin.get()
从流中读取单个字符是可能的,而且效率更高,但是处理换行符有点麻烦。如果您想忽略前导空格,抱怨其他非空输入等,则可能会变得更花哨

在按enter键之前,您键入的任何内容都可能无法到达流,因此他们需要按“Q”键退出。为了避免这种情况,您需要操作系统特定的非标准代码或库。有很多so问题解释了如何在不等待enter键的情况下读取密钥


如果您需要容忍错误并提示用户重试,最简单的方法是以不会因无效输入而失败的方式读取,然后在尝试解析可能失败的数据时使用单独的流对象。以下显示了如何解析输入行中的几个变量:

std::string line;
while ((std::cout << "enter x y z (space separated): ") &&
       std::getline(std::cin, line))
{
    std::istringstream iss(line); // input string stream with contents of last line read
    char c;
    if ((iss >> x >> y >> z) && !(iss >> c))
        // we successfully parsed out x, y and z, and there was no trailing
        // non-whitespace character, so all's good...
        break;
    std::cerr << "unable to parse 'x', 'y' and 'z' from input, or unexpected trailing text\n";
    std::cerr << "please try again\n";
}
std::字符串行;
而((标准::cout>x>>y>>z)和&!(iss>>c))
//我们成功地解析出了x、y和z,并且没有拖尾
//非空白字符,所以一切都很好。。。
打破

如果您的问题只是关于更改输入循环,那么不应该有那么多不相关的代码。编辑:)抱歉,我是新来的。我希望按ENTER键,循环继续。Q,然后回车,循环退出。cin.get()做什么?“要按ENTER键,循环继续。Q,然后回车,循环退出”-这就是我答案中的代码所做的。“cin.get()做什么?”-它从流中读取下一个字符,因此您可以与“\n”进行比较,以查看在“Q”或“Q”之前是否按了enter键,但如果有人连接来自另一个操作系统的输入,则可能会有一个回车符挂在后面,由您的下一个
cin>>值[n]看到;
-对于您的情况,如果您将流保留为跳过空白的默认行为,那么这可能无关紧要。谢谢。我添加了std::getline(std::cin,reply);在循环中,它会运行。这是我应该做的,还是我在做额外的步骤并遗漏了什么?听起来你可能遗漏了什么,尽管我不能确定你是否没有看到更新的代码;
getline
可以在循环结束时的
while()
条件中调用,而不是“在循环中”,这使得测试
getline
本身是否成功以及测试行内容本身是否包含“Q”变得非常简单。只需将我的答案中的整个
while(…)
子句复制/粘贴到代码中,并在循环之前放置一个
std::string my_string;
if (!(cin>>list[n].firstName>>list[n].lastName>>list[n].age))
{
    std::cerr << "oops... unable to parse `firstname lastname age' from stdin... terminating\n";
    return EXIT_FAILURE;
}
std::cin.ignore(std::numeric_limits<streamsize>::max(), '\n');
std::string line;
if (cin>>list[n].firstName>>list[n].lastName>>list[n].age))
{ 
     std::istringstream iss(line);
     if (!(iss >> firstName >> lastName >> age))
     {
        std::cerr << "oops... unable to parse `firstname lastname age' from stdin... terminating\n";
        return EXIT_FAILURE;
     }

     char c;
     if (iss >> c)  // this should fail - no more non-whitespace content allowed...
     {
        std::cerr << "oops... extra input encountered after the age value... terminating\n";
        return EXIT_FAILURE;
     }
}
do
{
    ...
} while (std::getline(std::cin, my_string) && my_string != "Q" && my_string != "q");
std::string line;
while ((std::cout << "enter x y z (space separated): ") &&
       std::getline(std::cin, line))
{
    std::istringstream iss(line); // input string stream with contents of last line read
    char c;
    if ((iss >> x >> y >> z) && !(iss >> c))
        // we successfully parsed out x, y and z, and there was no trailing
        // non-whitespace character, so all's good...
        break;
    std::cerr << "unable to parse 'x', 'y' and 'z' from input, or unexpected trailing text\n";
    std::cerr << "please try again\n";
}