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;
}
しかし、ユーザーが 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
エントリーでも同じことを達成できますか?
ありがとう