我想知道是否有一种简洁的方法可以将变量与数据类型进行比较。
以下示例不是一段有效的代码,但注释和注释下面的代码应该解释我的问题:
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;
}
答案 0 :(得分:1)
下面:
stringstream(inputString) >> inputFloat;
执行此操作时,您正在调用operator>>(istream, float)
,因此您要么成功读取浮点数,要么失败并且不加载任何内容。您可以检查stringstream对象上的.fail()
以验证它。
由于您正在调用operator>>
的特定重载,因此您不可能将“不同类型的变量”加载到inputFloat
变量中,或类似的任何内容。
答案 1 :(得分:0)
您需要的只是简单检查std::getline
和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
时,已成功从流中检索它并包含有效值。