Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;我应该使用哪种例外情况?/确定用户';s输入 我是C++新手,我正在测试“尝试”。 但是,我不确定当抛出可能导致单词或短语本身被分割时,应该捕获什么异常:_C++_Exception - Fatal编程技术网

C++;我应该使用哪种例外情况?/确定用户';s输入 我是C++新手,我正在测试“尝试”。 但是,我不确定当抛出可能导致单词或短语本身被分割时,应该捕获什么异常:

C++;我应该使用哪种例外情况?/确定用户';s输入 我是C++新手,我正在测试“尝试”。 但是,我不确定当抛出可能导致单词或短语本身被分割时,应该捕获什么异常:,c++,exception,C++,Exception,例如: int current_year = 1; //code.... cout << "What year is it?\n"; cin >> current_year; while (n>1) { try{ throw (current_year / current_year); } catch (exception) { cout << "What year is it?\n";

例如:

int current_year = 1;

//code....

cout << "What year is it?\n";
cin >> current_year;

while (n>1) {

    try{
        throw (current_year / current_year);
    }
    catch (exception) {
        cout << "What year is it?\n";
        cin >> current_year;
    }
    catch (...){
        n = 0;
int当前年=1;
//代码。。。。
cout>本年度;
而(n>1){
试一试{
投掷(本年度/本年度);
}
捕获(例外){
cout>本年度;
}
捕获(…){
n=0;

在这里,由于当前年份定义为int,但通过“cin设置,因此您可以按类型抛出异常。尽管语言允许任何类型,但通常只应抛出派生自的内容

您有几个选项可供选择,
std::invalid_参数
可能在这里最有意义,因为它们输入了无效数据

但是,您的代码没有实际意义,如果发生意外错误,您应该抛出。您应该根据用户错误的文本创建异常

您只需抛出数字1(
current_year/current_year
将始终为1,除非current_year输入为0,在这种情况下,您会遇到更多问题),并且您必须在异常处理程序中捕获一个int,那么捕获1意味着什么


理想情况下避免捕获(…)。有时在您确实不允许函数抛出时使用它,例如,您在某个工作线程中,没有任何东西会捕获它,它只会导致您的应用程序在最好让线程作为失败的作业终止时终止。

您抛出的值类型为
int
,无论是否为有效值红色。如果
current\u year
为零,您可能会得到某种错误-未定义的行为,可能不是可捕获的异常;否则,您将始终抛出
int
值1。这可以由
catch(int)
块处理;但这没有任何意义

如果要在用户输入数字以外的内容时抛出,则需要检查输入结果:

if (!(cin >> current_year)) {
    throw std::runtime_error("Invalid year");
}
runtime\u error
异常
的子类,因此将被
异常
的处理程序捕获

或者,您可以定义自己的异常类并抛出它。最好是它也是
异常
的子类,这样,如果没有更具体的处理程序,该异常类的处理程序至少可以为其提取错误消息。这可能类似于

struct InvalidYear : std::runtime_error {
    InvalidYear() : std::runtime_error("Invalid year") {}
};

if (!(cin >> current_year)) {
    throw InvalidYear();
}

这可以由
InvalidYear
的特定处理程序捕获,或者由
runtime\u error
exception
的更通用的处理程序捕获。try不是一个函数……而且,
int
不是
std::exception
类型。最后一点,永远不要捕获任何超出您绝对知道的范围。您应该怎么做把一个词除以另一个词"是什么意思?举一个用户输入的例子,它是可以的,并且你认为应该引发异常的输入。这种无效输入是可以预料的,所以我甚至不会麻烦抛出异常。告诉用户他必须输入什么,然后再次要求输入。你应该测试用户是否输入了一个数字,而不是总是抛出。你应该捕获一个异常通过引用,而不是通过值。你根本不在你的代码中使用
isdigit
,我们如何判断你是否使用错误?
isdigit
用于检查单个字符是否是数字。它不是用来检查字符串是否是数字。另一件事我不明白的是,你为什么总是抛出例外,你想做什么?