我想检查输入是否有效,但是当我运行此代码时,我看到它只检查charcters的输入。如果我输入一个浮点数,它将采用它并使用整数而不是小数部分。
#inclide <iostream>
using namespace std;
...
int n;
cout << "Your input is: "<<endl;
cin >> n;
while (cin.fail()) {
cout << "Error. Number of elements must be integer. Try again: " << endl;
cin.clear();
cin.ignore(256, '\n');
cin >> n;
}
...
`
那么,如何让这段代码看看输入是否是浮点数?
答案 0 :(得分:1)
您可以尝试使用int
将输入字符串转换为std::istringstream
。如果成功,则检查eof()
(忽略空格后)以查看转换为int
时是否消耗了整个输入。如果整个输入被消耗掉,则它是有效的int
。
有点像这样:
int input_int()
{
int i;
// get the input
for(std::string line; std::getline(std::cin, line);)
{
// try to convert the input to an int
// if at eof() all of the input was converted - must be an int
if((std::istringstream(line) >> i >> std::ws).eof())
break;
// try again
std::cout << "Not an integer please try again: " << std::flush;
}
return i;
}
int main()
{
std::cout << "Enter an integer: " << std::flush;
std::cout << "i: " << input_int() << '\n';
}
答案 1 :(得分:0)
在Raindrop7的解决方案的基础上,这里是完整的代码,可以满足您的需求:
#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double m;
cout << "Your input is: "<<endl;
cin >> m;
while (cin.fail() || (m-floor(m)))
{
cout << "Error. Nubmer of elements has to be integer. Try again: " << endl;
cin.clear();
cin.ignore(256, '\n');
cin >> m;
}
int n = (int)m;
return 0;
}
以下是示例输出:
Your input is:
2.7
Error. Nubmer of elements has to be integer. Try again:
erer
Error. Nubmer of elements has to be integer. Try again:
2
答案 2 :(得分:0)
以下代码应该能够达到您希望实现的目标:
#inclide <iostream>
using namespace std;
int n;
cout << "Your input is: "<<endl;
while (!(cin >> n) || cin.get() != '\n') {
cout << "Error. Number of elements must be integer. Try again: " << endl;
cin.clear();
cin.ignore(256, '\n');
}
如果发生以下任何一种情况,程序会要求用户重新输入一个整数:
std::cin
流中提取整数。 (例如,当用户输入字符或字符串时)std::cin
中的下一个字符不是新行'\n'
字符。 (例如,输入带有小数点的数字,如1.1
,或输入一个整数后跟一个字符1a
。)