首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何捕获此异常C++

如何捕获此异常C++
EN

Stack Overflow用户
提问于 2012-06-14 03:19:54
回答 4查看 1.5K关注 0票数 0

我想捕获异常,当有人在cin上没有给出一个数值时,程序将读取下一个值。

代码语言:javascript
复制
#include <iostream>

using namespace std;

int main()
{
    int x = 0;
    while(true){
        cin >> x;
        cout << "x = " << x << endl;
    }
    return 0;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-14 03:23:06

如果你真的想使用异常处理,你可以这样做:

代码语言:javascript
复制
cin.exceptions(ios_base::failbit); // throw on rejected input
try {
// some code
int choice;
cin >> choice;
// some more code
} catch(const ios_base::failure& e) {
    cout << "What was that?\n";
    break;
} 

参考:http://www.cplusplus.com/forum/beginner/71540/

票数 4
EN

Stack Overflow用户

发布于 2012-06-14 03:22:11

没有任何异常被抛出。相反,cin设置了一个“坏输入”标志。你想要的是:

代码语言:javascript
复制
while ((std::cout << "Enter input: ") && !(std::cin >> x)) {
    std::cin.clear(); //clear the flag
    std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n'); //discard the bad input
    std::cout << "Invalid input; please re-enter.\n";
}

This series of questions很好地解释了这一点。

链接:

clear()

ignore()

票数 4
EN

Stack Overflow用户

发布于 2012-06-14 03:26:16

添加如下内容:

代码语言:javascript
复制
if(cin.fail())
{   
  cin.clear();
  cin.ignore(std::numeric_limits<std::streamsize>::max(),' '); 
  cout << "Please enter valid input";
} 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11021856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档