C++ 有没有办法让异常无限期地工作?

C++ 有没有办法让异常无限期地工作?,c++,exception,c++17,C++,Exception,C++17,我一直在尝试从用户那里获取输入。我希望确保输入满足我使用try-and-catch块的其余代码的要求 但是,仅捕获一次后,它就会中止代码。我想确保在捕捉到错误后,它实际上返回到输入函数的次数相同,直到用户给程序一个有效的输入。除了完全不使用try-catch块之外,还有其他方法可以做到这一点吗 代码如下: #include <iostream> #include <string> #include <typeinfo> using namespace std

我一直在尝试从用户那里获取输入。我希望确保输入满足我使用try-and-catch块的其余代码的要求

但是,仅捕获一次后,它就会中止代码。我想确保在捕捉到错误后,它实际上返回到输入函数的次数相同,直到用户给程序一个有效的输入。除了完全不使用try-catch块之外,还有其他方法可以做到这一点吗

代码如下:

#include <iostream>
#include <string>
#include <typeinfo>

using namespace std;

long num; // I need num as global

long get_input()
{
    string input;
    long number;

    cout << "Enter a positive natural number: ";
    cin >> input;

    if ( !(stol(input)) ) // function for string to long conversion
        throw 'R';

    number = stol(input);

    if (number <= 0)
        throw 'I';

    return number;
}

int main()
{
    try
    {
        num = get_input();
    }
    catch (char)
    {
        cout << "Enter a POSTIVE NATURAL NUMBER!\n";
    }

// I want that after catch block is executed, the user gets chances to input the correct number 
// until they give the right input.

    return 0;
}
#包括
#包括
#包括
使用名称空间std;
long num;//我需要num作为全局
长get_输入()
{
字符串输入;
长数;
cout>输入;
if(!(stol(input))//用于字符串到长字符串转换的函数
抛出“R”;
数字=stol(输入);

如果(number您需要明确写入这样的处理,例如通过循环:

intmain()
{
而(1){
尝试
{
num=获取_输入();
返回0;//这个完成程序
}
捕获(字符)
{

您是否希望在满足条件之前重试某项操作。这是循环的定义。为什么不使用循环?毕竟,您不必捕获循环之外的内容。因此,异常处理程序无法重复执行?您可以保留
try
块。这就是异常的用途。如果您想再次尝试,请重复执行它。这就是循环所需要的看到现在给出的答案了。但这仍然有一个循环。你不使用循环的意图是什么?我只是想尝试一些新的东西,但有例外,仅此而已。Kitsue的答案似乎是合理的。