我试图从标准输入中读取一个整数,并且我有这个代码几乎就是这样,并且如果用户输入字母则再次提示。但是,它有一个问题,如果用户输入一个像6.9这样的浮点数,那么这被接受为有效输入并且函数结束。
int nr=0;
std::cout << "Vector length: ";
std::cin >> nr;
while (std::cin.fail() ) {
std::cin.clear();
std::cin.ignore(std::numeric_limits<int>::max(), '\n');
std::cout << "Input is not number , try one more time: ";
std::cin >> nr;
}
我想检测所有错误的输入。如何更改我的代码以将浮点数视为无效?
答案 0 :(得分:2)
执行以下操作:
int nr = 0;
std::cout << "Vector length: ";
while (!(std::cin >> nr)) {
std::cin.clear();
std::cin.ignore(std::numeric_limits<int>::max(), '\n');
std::cout << "Input is not number , try one more time: ";
}
但是,上述代码将适用于浮点(例如,“9.8”)。如果输入EOF,它还将创建无限循环。如果您想要严格的积分值,请执行以下操作:
#include <iostream>
#include <cctype>
#include <string>
#include <algorithm>
bool is_number(const std::string& s)
{
return !s.empty() && std::find_if(s.begin(),
s.end(), [](char c) { return !std::isdigit(c); }) == s.end();
}
int main()
{
std::string num;
std::cout << "Vector length: ";
std::getline(std::cin, num);
while (!is_number(num)) {
std::cout << "Input is not number , try one more time: ";
std::cin.clear();
std::cin.ignore(std::numeric_limits<int>::max(), '\n');
num.clear();
std::getline(std::cin, num);
}
return 0;
}