我该如何消毒cin?

Eam*_*ney 7 c++

假设我有一个接受整数的程序.如果用户输入超出范围的号码或字母或其他内容,如何阻止程序崩溃?

小智 4

cin\ 的基类是std::basic_istream. 如果无法从流中提取请求的数据,输入流会指示可恢复错误。为了检查该错误位,std::basic_istream::fail()必须使用 \xe2\x80\x94 方法,true如果出现故障或false一切正常,它就会返回。重要的是要记住,如果出现错误,数据将保留在流中,当然,还必须使用 清除错误位std::basic_istream::clear()。此外,程序员必须忽略不正确的数据,否则尝试读取其他内容将再次失败。为此,std::basic_istream::ignore()可以使用方法。至于取值的有效范围,则必须手动检查。好了,理论已经足够了,这是一个简单的例子:

\n\n
#include <limits>\n#include <iostream>\n\nint main()\n{\n    int n = 0;\n\n    for (;;) {\n        std::cout << "Please enter a number from 1 to 10: " << std::flush;\n        std::cin >> n;\n\n        if (std::cin.fail()) {\n            std::cerr << "Sorry, I cannot read that. Please try again." << std::endl;\n            std::cin.clear();\n            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), \'\\n\');\n            continue;\n        }\n\n        if (n < 1 || n > 10) {\n            std::cerr << "Sorry, the number is out of range." << std::endl;\n            continue;\n        }\n\n        std::cout << "You have entered " << n << ". Thank you!" << std::endl;\n        break;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

希望能帮助到你。祝你好运!

\n