是否可以在C/C++中禁用隐式转换.
假设我想写一个有效函数,只让我输入 integers in range [1,10]
我已经写了:
#include <iostream>
using namespace std;
int main( )
{
int var=0;
cout << "Enter a number (Integer between 1 to 10) : ";
while( (!(cin >> var )) || (var > 10 ) || (var < 1) )
{
cout << "U nuts .. It can only be [1,10]\n";
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
cout << "Enter a number (Integer between 1 to 10) : ";
}
cout << "\nYou entered : " << var;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是如果用户输入9.5,则通过将float 9.5转换为9并将其存储在var中来接受它.我希望任何浮动条目都被视为无效条目.我如何最紧凑地实现这一目标.
我不想做这种事:
#include <iostream>
#include <cmath>
using namespace std;
int main( )
{
float var=0;
cout << "Enter a number (Integer between 1 to 10) : ";
while( (!(cin >> var )) ||(var < 1)|| (var > 10 ) || !(ceilf(var) == var) )
{
cout << "U nuts .. It can only be [1,10]\n";
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
cout << "Enter a number (Integer between 1 to 10) : ";
}
cout << "\nYou entered : " << var;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这符合我的目的.但是我想知道的是,从float到int的转换有什么方法 - 我可以抑制它或者它可以将它显示为错误输入.
类似于cin >> varvar类型的方式int- 如果我们输入char它返回false条件.我们能否实现同样的float进入?
谢谢
但是如果用户输入9.5,则通过将float 9.5转换为9并将其存储在var中来接受它.
不,不.如果用户输入9.5,则cin >> var在其到达时停止读取.(并将其留在流上).没有float-to-int转换,因为你没有读过a float,只是一个int.
修复是读取输入的其余部分(之后cin >> var),并确保在结束后没有遗留任何错误int.