从用户那里获取输入

Getting input from the user

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

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