如何检查输入数字整数是不是不浮动?
Posted
技术标签:
【中文标题】如何检查输入数字整数是不是不浮动?【英文标题】:How to check if the input number integer not float?如何检查输入数字整数是否不浮动? 【发布时间】:2016-10-18 22:52:37 【问题描述】:我想检查输入是否有效,但是当我运行此代码时,我发现它只检查输入的字符。如果我输入一个浮点数,它将使用它并像没有小数部分的整数一样使用。
#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;
...
`
那么,如何让这段代码查看输入是否为浮点数?
【问题讨论】:
作为字符串读入并解析。 你问错了问题,这个问题有一个后续问题:“我如何观察任何非数字输入?” 你应该问的问题问题是这样的:*“我如何确定整个输入是否是整数的一部分,this answer 完美地解决了这个问题。 【参考方案1】:您可以尝试使用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';
【讨论】:
【参考方案2】:以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
【讨论】:
这纯属巧合,会产生误报。浮点表示不精确,operator>>
丢失信息。如果事情变糟,它将浮点值转换为可以用整数值表示的东西。你的测试就完成了……
@IInspectable 举个例子来证明你所说的
@Raindrop7:看看std::nextafter, std::nexttoward,并生成任意示例来证明这一事实。 (提示:从任何整数开始,将std::next
调用到更高的值,然后输入刚好低于这两个值中点的值。)
谢谢!是的,这很好。但我们为了实践我们创造我们自己的尝试。在实际程序中,我们使用这些新设施【参考方案3】:
下面的代码应该可以实现你希望达到的效果:
#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
这样的字符时。)
【讨论】:
以上是关于如何检查输入数字整数是不是不浮动?的主要内容,如果未能解决你的问题,请参考以下文章