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 回答