如何检查输入的数字是否为整数不是浮点数
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
)
相关文章:
- 检查输入是否不是整数或数字
- 是否基于数组B整数打印数组A中的整数
- 检查TCHAR数组输入是否为带符号整数C++
- 有没有一种优雅而快速的方法来测试整数中的 1 位是否位于连续区域
- 如果整数与指针大小相同,则重新解释将整数转换为指针双射是否具有双射作用?
- 在线程中读取无符号整数时,c++ 位是否以原子方式切换?
- 如何检测除整数以外的任何内容是否传递给我的类构造函数?
- 检查字符串是否为整数
- FlatBuffers/Protobuf 中是否有支持任意 24 位有符号整数定义的可移植二进制序列化架构?
- C++11 标准是否保证零值有符号整数的一元减号为零?
- 验证用户输入和整数是否C++
- 如何检查是否定义了固定宽度的整数
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- 将字符串转换为整数类型T,检查是否存在溢出
- 在C/C++中检查数字是否为整数(不带scanf/gets/etc)
- 整数指针数组的元素是否可以指向整数数组?
- 如何在 c++ 中解析包含整数的字符串并检查是否大于最大值
- 当 map 是一个整数数组并且由 operator[] 创建时,它是否初始化其映射类型
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- 整数浮点数除以自身是否保证为 1.f?