【问题标题】:try and except, but in c++尝试和除外,但在 C++ 中
【发布时间】:2020-12-17 23:28:06
【问题描述】:

假设我想计算用户输入的一系列数字的二进制值,但我不想限制用户可以输入的数字数量,所以我在 Python 3 中执行此操作:

try:
    lst = list()
    while True:
        n = int(input("Enter the number: "))
        b = binary_of(n)                      // Function to find binary value
        lst.append(b)
except:
    print("The respective binary values are", '\n')
    print(lst)

在上面的代码中,当用户输入一个非整数值时,“try”停止执行,程序移至“except”打印列表,这正是我想要的。

我可以在 C++ 中做类似的事情吗?是否也有 C++ 的“尝试和除外”版本??

【问题讨论】:

  • 是的,c++ 中有一个 try and catch 版本。
  • 是的,它叫做try and catch。但是,对我来说,这是不好的编程习惯。例如,当转换为 int 时出现错误时,您可以中断,而不是无限循环。这也是一般例外(即捕获所有错误)。您不知道异常发生在哪里以及导致异常的原因。例如如果“binary_of”有问题怎么办?
  • 您可以捕获不同类型的错误,因此这不是一般问题,但内存可能是个问题。
  • @Danyal 为什么这是一个不好的做法? int 中的错误引发异常。异常打破了循环。不过,except 确实是 except ValueError
  • 这能回答你的问题吗? Checking cin input stream produces an integer

标签: c++ c++11 exception try-catch


【解决方案1】:

exception 是在程序执行期间出现的问题。允许用户停止提供更多输入不是问题。你的逻辑应该处理。有多种方法可以做到这一点。

Try..catch 随时为您服务。

一种方法是解析输入以检查输入是否为 int。如果没有,breakwhile

另一种方式可以如下所示。

#include <iostream>
using namespace std;
int main() {
    int num;
    cin >> num;
    while(cin.fail()){
        //your logic goes here
        cin.clear();        
        cin.ignore(numeric_limits<int>::max(), '\n');
        cin >> num;
    };
    return 0;
}

【讨论】:

  • 一个很好的补充是,至少在某些情况下,使用 try/except 进行控制流是 Python 中公认的习惯用法。在 C++ 中用 try/catch 做同样的事情是非常不受欢迎的。
  • 或者,更惯用的说法是,删除两个cin &gt;&gt; num; 语句并将输入放入while,如下所示:while (cin &gt;&gt; num)。 +1。
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 2020-04-11
相关资源
最近更新 更多