我应该如何使用 c++ 处理"std::cerr"和"std::cin.fail()"?



你能帮我解决这个小问题吗?

问题:程序应该返回一个错误代码(1),并在遇到失败时打印出这个精确的字符串:"遇到错误,正在退出…"

我代码:

#include <iostream>
#include <random>
int main(int argc, char const *argv[])
{
int number, random;
random = (std::rand() % 100);
while (std::cin >> number)
{
if (number < random && number >= 0)
{
std::cout << "This number is larger." << std::endl;
}
else if (number > random && number <= 99)
{
std::cout << "This number is smaller." << std::endl;
}
else if (std::cin.fail())
{
std::cout << "Error encountered, exiting..." << std::endl;
}
else if (number < 0 || number > 99)
{
std::cout << "[WARNING] : Number must be between 0 and 99" << std::endl;
}
else if (number == random)
{
std::cout << "Great! You're right!" << std::endl;
break;
}
};
return 0;
}

编译完成后,我会输入e.g.。"写"。我的编程直接完成了。我没有看到"遇到错误,退出…"在我的终端机里。你能给我一些关于std::cin.fail()的建议吗?我该怎么办?我也不明白,我可以把这里的std::cout换成std::cerr吗?std::coutstd::cerr的最大区别是什么?

Thanks so much

问好

您应该在while循环之后测试std::cin.fail(),因为如果std::cin >> number失败,则不会进入while循环的正文。

您还可以稍微调整一下测试,这样就不必一遍又一遍地执行相同的测试。此外,std::endl刷新输出流,这在绝大多数情况下是不必要的,只会占用额外的时间。

// ...
while (std::cin >> number)
{
if (number < 0 || number > 99)
{
std::cout << "[WARNING] : Number must be between 0 and 99n";
}
else if (number < random) // no need to test if it's out of bounds
{
std::cout << "This number is larger.n";
}
else if (number > random) // no need to test if it's out of bounds
{
std::cout << "This number is smaller.n";
}
else                       // no need to test anything
{
std::cout << "Great! You're right!n";
break;
}
}
if(std::cin.fail())
{
std::cout << "Error encountered, exiting...n";
return 1;
}
return 0;
}

std::coutstd::cerr之间的区别在于它将使用哪个输出流。运行你的程序的人可以分别读取两个流,如果他们想要做错误日志。

最新更新