c++ - 如何在 C++ 中捕获运行时错误?

标签 c++ iostream cin

我无法处理用户输入的数据与预期不同的运行时错误。例如,预期是一个整数,但(可能)用户输入了一个字符串。在我的控制台程序中,当发生这种情况时,我的屏幕上只会打印出一大堆垃圾信息,它会进入无限循环。我该如何解决这个问题,以便在发生这种情况时显示错误消息,而不是整个程序都变成垃圾?

int x = 0;
cout << "\n\nEnter a number(1-9): ";
cin >> x;
if(x<1 || x>9)
{
   cout<<"\nThe place you entered is invalid. Please enter the correct place number";
}else{
   cout<<"Correct";
}

如果我输入大于 2^31 的数字(我知道它是 int 数据类型的最大值)或 char 值,它将进入无限循环。我怎样才能解决这个问题

最佳答案

cin 有点奇怪,因为如果您尝试从用户那里读取数据并且类型错误(例如,当 int 是预期的)或值是非法的(例如,它太大),cin 进入“失败状态”并且从那时起将拒绝读取用户的任何值,直到您明确解决问题.正确地从 cin 中读取数据以防止这种情况发生有点棘手,但可以通过编写一些不错的辅助例程并在以后的程序中调用它们来简化。

有关从 cin 正确读取数据的一种方法的说明,您可能需要查看 these course notes from Stanford's CS106L course 描述流在 C++ 中的工作方式以及如何正确读取和写入数据。

希望这对您有所帮助!

关于c++ - 如何在 C++ 中捕获运行时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9958460/

相关文章:

c++ - 如何从列表中排序(自定义)字符串

c++ - 当程序可见或最小化时进程 ID 发生变化

c++ - `cout << argv[0]` 返回十六进制值?

不使用指针或数组的 C++ 损坏堆

c++ - 指向 C++ 中的结构的指针 - 从控制台读取?

c++ - 在 C++ 中直接读取结构

c++将格式化的字符串作为参数传递给函数

c++ - 为什么在一种情况下模板参数需要 volatile 而在其他情况下不需要?

c++ - 将 Botan 加密结果输出到 QDomDocument,反之亦然

c# - 在一个 Stream 类中拼接多个流