csjw1992 2016-12-13 04:44 采纳率: 0%
浏览 2113

c++中while(!(cin >> a))无限循环的问题

不管用goto还是while都是无限循环,求问这是为什么
代码如下:

 #include <iostream>
#include <stdexcept>
#include <exception>
using namespace::std;
int main(){
    int a, result{ 1 };
    cout << "input a number:" << endl;
// retry:
    // try{
        // cin >> a;
        // if (cin.fail())
            // throw runtime_error("not a number!");
    // }catch(runtime_error e){
        // cout << e.what() << endl;
        // goto retry;
    // }
    while(!(cin >> a)){
        cout << "not a number!" << endl;
    }
    do{
        result *= a;
    }while(a-- > 1);
    cout << "result is:\n\t" << result << endl;
    return 0;
}
  • 写回答

2条回答 默认 最新

  • Tiger_Zhao 2016-12-13 06:02
    关注

    首先:出错后,cin.fail() 这种状态一旦标记上后就一直为真,需要用 cin.clear(); 清除状态。
    其次:出错后,原先导致错误的字符还在输入缓冲区,你继续用一样的方法读取还是一样的错误。应该用 cin.ignore(); 丢弃一个字符。
    加上上面这两句代码。

    评论

报告相同问题?

悬赏问题

  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题