我想知道是否存在一种将变量与数据类型进行比较的简洁方法。
下面的示例不是功能正常的代码,但是注释和注释下面的代码应解释我的问题:
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::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
时已成功从流中检索到它并包含有效值。