[英]How to check if the input number integer not float?
我想检查输入是否有效,但是当我运行此代码时,我看到它只检查字符输入。 如果我输入一个浮点数,它将接受它并使用没有小数部分的整数。
#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;
}
...
`
那么,如何让这段代码查看输入是否为浮点数呢?
您可以尝试使用std::istringstream
将输入字符串转换为int
。 如果成功,则检查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(!line.empty() && (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';
}
以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
下面的代码应该能够完成您希望实现的目标:
#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
。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.