从用户那里获取输入

时间:2019-08-06 21:00:35

标签: c++ input cin

所以我在看有关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;

1 个答案:

答案 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的形式输入。它使您可以清除缓冲区并清理输入。当然,它的成本更高,但是如果您要处理输入,那么用户将不会注意到处理时间。