gpt4 book ai didi

c++ - 在 C++ 中禁用隐式转换

转载 作者:搜寻专家 更新时间:2023-10-30 23:59:29 24 4
gpt4 key购买 nike

是否可以在 C/C++ 中禁用隐式转换。

假设我想写一个有效性函数,让我只输入 [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;
}

但是如果用户输入 9.5,它会通过将 float 9.5 转换为 9 并将其存储在 var 中来接受它。我希望任何 float 条目都被视为无效条目。我如何最紧凑地实现这一目标。

我不想做这样的事情:

#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;
}

这符合我的目的。但我想知道的是,有什么方法可以将 float 转换为 int - 我可以抑制或将其显示为错误输入。

类似于 cin >> var 的方式,其中 var 类型是 int - 如果我们输入 char 它返回 false 条件。我们能否为 float 条目实现相同的效果?

谢谢

最佳答案

But if the user enters 9.5 it accepts it by converting the float 9.5 as 9 and storing it in var.

不,它没有。如果用户输入 9.5,则 cin >> var 会在遇到 . 时停止读取(并将其留在流中)。没有 float 到整数的转换,因为您没有读取float,只是一个int

解决方法是读取输入的其余部分(在 cin >> var 之后),并确保在 int 结束后没有遗留任何错误信息。

关于c++ - 在 C++ 中禁用隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16276953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com