私は次の簡単なコードを持っています:
#include <iostream>
int main()
{
int a;
std::cout << "enter integer a" << std::endl;
std::cin >> a ;
if (std::cin.fail())
{
std::cin.clear();
std::cout << "input is not integer, re-enter please" <<std::endl;
std::cin >>a;
std::cout << "a inside if is: " << a <<std::endl;
}
std::cout << "a is " << a <<std::endl;
std::cin.get();
return 0;
}
上記のコードを実行して次のように入力すると、次のよう1.5
に出力されますa is 1
。参考:gcc4.5.3でコードをコンパイルして実行します。
これはcin
、整数を期待しているのにfloatが表示された場合、暗黙的に変換を行うことを意味します。それでcin
、これは、浮動小数点数を見るとき、それがfail()
状態にないことを意味しますか?なぜそうなのですか?C ++が>>
演算子で暗黙の変換を行うためですか?
また、次のコードを試して、この投稿のアイデアに従って、指定された入力番号が整数であるかどうかを判断しました。指定された数値が整数であるかどうかをテストします。
#include <iostream>
bool integer(float k)
{
if( k == (int) k) return true;
return false;
}
int main()
{
int a;
std::cout << "enter integer a"<< std::endl;
std::cin >> a ;
if (!integer(a))
{
std::cout << "input is not integer, re-enter please" ;
std::cin.clear();
std::cin >> a;
std::cout << "a inside if is: " << a <<std::endl;
}
std::cout << "a is " << a <<std::endl;
std::cin.get();
return 0;
}
このコードブロックは、float入力で実行するとブロックをa
スキップするだけなので、整数かどうかをテストすることもできませんでした。if
では、なぜこれがcinでユーザー入力を取得する場合に当てはまるのでしょうか。たまに入力を入れたいのに、誤って189
入力した場合、この場合は悪い結果になります。それで、これはユーザー入力整数を取得するために使用することは良い考えではないことを意味しますか?18.9
18
cin
ありがとうございました。