gpt4 book ai didi

关于异常处理的 C++ 建议

转载 作者:太空宇宙 更新时间:2023-11-04 12:39:16 26 4
gpt4 key购买 nike

由于我对异常非常陌生,所以我在使用以下内存异常代码时遇到了一些麻烦。基本上,我需要计算并显示 10 个正输入的总和。在输入过程中,我的程序应该使用异常机制来显示一条消息,表明它不允许负数/非数字(NaN),如果输入是这样的话,然后退出程序。我被告知使用 std::cin.fail() 来检测输入的值是否符合变量类型(但我不确定如何实现)。感谢您的帮助,谢谢!

#include <iostream>

int main() {
int number;
int a=-2;
try {

for(int i=0; i<10;i++) {
std::cin>>number;

}
}
catch (...) {

number==-number?
std::cout << "Its negative"<<std::endl;

number==a?
std::cout << "Its NaN"<<std::endl;
}
}

最佳答案

你说“10 个正输入”,但你有 int number; .如果你的number将是一个整数,那么它不能像 33.44 这样的分数例如,它也不能是 NaN (所以你不需要检查)。如果你想允许分数,做double number反而。除此之外,支票可能如下所示:

for (int i = 0; i < 10; i++) {
std::cin >> number;
if (std::cin.fail()) {
std::cin.clear();
std::string input;
std::cin >> input;
std::cout << "input failed! Invalid input: " << input << std::endl;
return -1;
}

在输入每个数字后,您执行 std::cin.fail()查看。如果失败,您可以返回。在这个例子中,我还让它打印无效输入。为此,您需要调用 std::cin.clear();重置该错误标志,然后您可以将该无效输入放入 std::string (这应该有效,与 number 不同)。您需要包括 <string>为了那个原因。如果你不需要打印任何东西,你可以 return忘记清算、字符串和输出。此外,在这个例子中,由于无效输入造成的困惑被整齐地清理了,如果你不这样做,你可以再次接受更多(有效)输入 return相反。

接下来,检查负数:

if (number < 0) {
std::cout << "Error: Negative number!" << std::endl;
return -1;
}

最后,NaN检查(double):

if (isnan(number)) {
std::cout << "Error: number is NaN!" << std::endl;
return -1;
}

您需要包括 <math.h>对于 isnan .

将它们放在一起,它可能看起来像这样:

#include <iostream>
#include <string> // std::istream >> std::string
#include <math.h> // isnan

int main() {
double number;

for (int i = 0; i < 10; i++) {
std::cin >> number;
if (std::cin.fail()) {
std::cin.clear();
std::string input;
std::cin >> input;
std::cout << "input failed! Invalid input: " << input << std::endl;
return -1;
}
if (number < 0) {
std::cout << "Error: Negative number!" << std::endl;
return -1;
}
if (isnan(number)) {
std::cout << "Error: number is NaN!" << std::endl;
return -1;
}
}
return 0;
}

关于关于异常处理的 C++ 建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55038539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com