[英]How should I do with “std::cerr” and “std::cin.fail()” using c++?
你能幫我解決這個小問題嗎?
問題:程序應該返回一個錯誤代碼(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;
}
編譯后,我將輸入例如'write'。 我的編程就直接寫完了。 我的終端中沒有出現“遇到錯誤,正在退出...”。 你能給一些關於std::cin.fail()
建議嗎? 我應該怎么做? 我也不明白,我可以在這里使用std::cerr
更改std::cout
嗎? std::cout
和std::cerr
之間的最大區別是什么?
非常感謝
此致
您應該在while
循環之后測試std::cin.fail()
,因為如果std::cin >> number
失敗,則不會進入while
循環的主體。
您還可以稍微重組測試,以不必一遍又一遍地執行相同的測試。 此外, std::endl
會刷新 output stream,這在絕大多數情況下是不必要的,只是需要額外的時間。
// ...
while (std::cin >> number)
{
if (number < 0 || number > 99)
{
std::cout << "[WARNING] : Number must be between 0 and 99\n";
}
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::cout
和std::cerr
之間的區別在於它將使用哪個 output stream 。 例如,如果運行您的程序的人想要記錄錯誤,他們可以分別讀取這兩個流。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.