我想知道是否存在一种将变量与数据类型进行比较的简洁方法。

下面的示例不是功能正常的代码,但是注释和注释下面的代码应解释我的问题:

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;
}

最佳答案

您只需要简单检查std::getlineoperator>>的返回值:

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时已成功从流中检索到它并包含有效值。

09-25 17:21