输入流上留下的字符导致无限循环

时间:2015-09-12 16:06:09

标签: c++ input while-loop infinite-loop cin

我是编程的新手,今天我在这里,因为我需要帮助我正在编写的程序。这个程序是本书的练习:使用C ++编程原理和实践。我必须编写一个程序,它使用一个函数来查找vector双精度中的min,max,mean和median元素。我试着写这个循环但是我在阅读数字时遇到了一些问题。这是循环:

void reading_loop()
{
cout << "Enter a series of numbers ending with any non-digit character : "; 

while (true) try {

    vector<double> values; 
    double x; 
    while (cin >> x) values.push_back(x);

    Stats result = get_stats(values); // a stats holds the results
    print_vector(values); 
    print_stats(result); 

    cout << "Try again : "; 

}
catch (runtime_error& e) {
    cerr << "Error : " << e.what() << '\n'; 

}
catch (...) {
    cerr << "Oops, something went wrong somewhere \n"; 
}

}

名为Stats的结果的对象是一个简单的结构,作者告诉我用它来保存get_stats(values)的结果。基本上这个程序的问题是while(cin >> x)循环,当我执行程序时,我输入第一个数字序列并使用字符停止读取:'; '程序按原样打印校正结果,但随后它会跳过while(cin >> x)读取,使程序进入无限循环。我在论坛上读过这样的问题,但我是编程新手,所以我不知道cin.ignore()cin.clear()等功能。你会如何解决这个问题?

0 个答案:

没有答案