📜  cin 异常 c++ (1)

📅  最后修改于: 2023-12-03 15:30:00.029000             🧑  作者: Mango

C++ 中的 cin 异常

cin 是 C++ 标准库中的一个输入流对象,通常用于从标准输入(即键盘)中读取数据。在读取数据的过程中,可能会发生各种异常,比如输入值的类型不匹配、输入流结束等等。这些异常需要程序员在使用 cin 时进行处理,以确保代码的健壮性。

cin 可能抛出的异常

在 C++ 中,cin 可能会抛出以下几种异常:

  • ios_base::failure:输入流读取异常,通常是由于读取到输入流的结束标志引起的。
  • std::bad_alloc:内存分配失败异常,通常是由于输入的数据过大而导致内存不足引起的。
  • std::ios_base::failure:输入流读取异常,比如输入的数据类型不匹配或者输入格式不正确引起的。
cin 异常处理方式

在 C++ 中,可以使用 trycatch 来捕获异常并进行处理。以下是一个示例代码,演示如何使用 trycatch 来处理 cin 异常:

#include <iostream>
#include <exception>

int main() {
    int num;

    std::cout << "Please enter a number: ";
    std::cin.exceptions(std::ios_base::failbit);
    // 如果输入失败,抛出异常

    try {
        std::cin >> num;
        
        // 处理输入成功的情况
        std::cout << "The number you entered is " << num << std::endl;
    } catch (const std::ios_base::failure& e) {
        // 处理输入失败的情况
        std::cerr << "Error: " << e.what() << std::endl;
    } catch (const std::exception& e) {
        std::cerr << "Exception: " << e.what() << std::endl;
    }

    return 0;
}

在上面的代码中,我们首先设置了 std::cin 的异常标记为 std::ios_base::failbit,这样当输入流读取失败时,就会抛出异常。然后我们使用 trycatch 来捕获异常并进行处理。如果输入成功,我们就输出读取到的数值,否则就输出错误信息。

值得注意的是,C++ 标准库中的异常继承自 std::exception,因此可以通过 catch (const std::exception& e) 来捕获所有的标准库异常。

总结

在 C++ 中,cin 可能会抛出异常,需要程序员注意处理。使用 trycatch 可以捕获异常并进行处理,以确保代码的健壮性。同时,也可以在使用 cin 时设置异常标记,以控制程序在何时抛出异常。