1

変数をデータ型と比較するための簡潔な方法があるかどうか知りたいです。

次の例は機能するコードではありませんが、コメントとコメントの下のコードは私の質問を説明するはずです:

string inputString = "";
float inputFloat = 0.0;

cout << "Input a string: ";

getline(cin, inputString);
stringstream(inputString) >> inputFloat;

// Is there a way to compare a float variable to a string or float data type? 
if(inputFloat == string) { 
    cout << "inputFloat is not a float" << endl;
} else if(inputFloat == float) {
    cout << "inputFloat is a float!" << endl;
}
4

2 に答える 2

1

ここ:

stringstream(inputString) >> inputFloat;

これを行うと、 が呼び出されるoperator>>(istream, float)ため、そこでフロートを読み取ることに成功するか、失敗して何もロードしないかのいずれかになります。.fail()stringstream オブジェクトをチェックして、それを確認できます。

の特定のオーバーロードを呼び出しているためoperator>>、変数に「異なる型の変数をロードした」などの可能性はありませんinputFloat

于 2013-10-30T19:03:55.083 に答える
0

必要なのは、std::getlineandの戻り値の単純なチェックだけoperator>>です。

std::cout << "Input a string: ";
std::string inputString = "";
float inputFloat = 0.0;
if (std::getline(std::cin, inputString) && 
    std::istringstream(inputString) >> inputFloat)  {
    std::cout << "Succesfully read float: " << inputFloat;
}
else {
    // TODO: either getline failed to read string or >> failed to extract float
}

std::istringstream(inputString) >> inputFloat一時的な文字列ストリームを構築し、そこから値>>を抽出するために特別に設計された適切なオーバーロードを使用することに注意してください。さらに戻り値をチェックすることで、が出力されるまでに、ストリームから正常に取得され、有効な値が含まれていることがfloat保証されます。inputFloat

于 2013-10-30T19:02:56.013 に答える