所以我在看有关C ++的教程。他在讲节目对生日很重要。这些就是条件。
1 - 18, 21, 50, > 65 : Important
All others are not important
他使用了以下代码:
std::string sAge = "0";
std::cout << "Enter your age : ";
getline(std::cin, sAge);
int nAge = std::stoi(sAge);
为什么不使用下面的代码而不是上面给出的代码从用户那里获取输入?
int nAge;
std::cin >> nAge;
答案 0 :(得分:3)
在使用IO流时,输入在c ++中是安全类型。所以当你做类似的事情
int nAge;
std::cin >> nAge;
编译器会发现像std::istream& std::cin::operator >>(int& var)
这样的重载,并且由于知道它正在与int
一起工作,因此它将仅存储输入的int
,即:5 -121、1235156141。它确实有一个主要问题。如果输入5a
,它将得到int
部分5
,并将a
留在流中,因为它不是int
。这对于您的以下代码可能非常不好,因为现在缓冲区中只有a
。如果您要求另一个int
,则将失败,因为a
不是int
。
要解决此问题,您可以做的是像在本教程中看到的那样将输入作为std::string
输入。完成此操作后,将从流中读取整个5a
并将其放入字符串中。然后stoi
将从其中删除int
部分,现在您有了有效的int
和空流。
因此,总而言之,如果您想要更好的错误处理,请以std::string
的形式输入。它使您可以清除缓冲区并清理输入。当然,它的成本更高,但是如果您要处理输入,那么用户将不会注意到处理时间。