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