【问题标题】:Infinite loop with two cin [duplicate]带有两个cin的无限循环[重复]
【发布时间】:2016-07-29 12:38:56
【问题描述】:

我有一个函数,我想读取整数,直到我输入一个非整数。我想重复这个功能,直到我按下回车键。但是字符被传递到第二个 cin 并且它变成了一个无限循环。

void  read () {
    int  x;
    while ( cin >> x );
}

int main () {
    char  a;
    do {
        read ();
        cin.ignore (256, '\n')
        cin >> a;
    } while ( a != '\n' )
}

【问题讨论】:

  • 这里的问题是即使变量在不同的函数中,cins 似乎以某种方式连接。
  • 这里一个全局变量cin
  • 好的,但我必须在第一个cin 的末尾去掉'\n',这样我才能用第二个阅读任何内容。而cin.ignore() 什么也没做。

标签: c++ cin


【解决方案1】:

1) 您忘记删除std::cin 中的失败位;使用clear()

2) 要检测空输入,我建议使用std::stringstd::getline()

我建议类似

#include <iostream>
#include <string>

void  read () {
    int  x;
    while ( std::cin >> x ) ;
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<int>::max(), '\n');
}

int main () {
    std::string  b;

    do {
        read();
        std::getline(std::cin, b);
    } while ( false == b.empty() );

    return 0;
}

【讨论】:

    猜你喜欢
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 2017-05-15
    • 2017-01-08
    • 2016-08-08
    相关资源
    最近更新 更多