大编辑:我添加了,它现在检测字符串输入:)!
if (false == isdigit(grade[0])
编辑:问题:无法确定我输入的是字符串而不是 float 还是整数。
我一直在浏览这个网站,其中有很多关于检查字符串输入的帖子。这是我尝试结合我所学的一切的看法,正如你所看到的,它并没有按照我的意愿去做。
这样的输入和发生的事情:
用户输入:“1.2”:可以判断它是一个 float
用户输入:“1”:可以判断它是一个整数
用户输入:“a”:错误:认为它是一个 float 。这就是问题。如果我输入“a”,我需要程序识别输入的字符串并调用某些函数。
一些指导将不胜感激:
#include "assessGrade.h"
int main(void)
{
int finalGrade = 0;
int gradeHolder = 0;
int numberGrade[5] = { 0,0,0,0,0 };
double doubleGrade = 0;
//my beloved bool's
bool floatGrade = false;
bool intGrade = false;
bool stringGrade = false;
//======================================//
// Getting the input from user //
// Also check for stringfloat/int type //
//======================================//
std::string grade;
std::getline(std::cin, grade);
std::stringstream stream(grade);
if (false == isdigit(grade[0]))
{
//it's not a digit
cout << "STRING: " << grade << endl;
stringGrade = true;
}
else if(!(stream >> gradeHolder) || grade.find('.') != std::string::npos)
{
//its a float!
cout << "FLOAT: " << grade << endl;
floatGrade = true;
}
else
{
//it's a int!
cout << "INTEGER: " << grade << endl;
intGrade = true;
}
//======================================//
// Parsing the input //
//======================================//
if (intGrade == true)
{
//do int stuff here
}
else if (floatGrade == true)
{
//do float stuff here
//doubleGrade = grade;
}
else
{
//do string stuff here
}
return 0;
}
最佳答案
要准确确定“浮点值”是什么绝非易事。 +1.0E-02
是浮点变量吗?里面有一封信!
您几乎得到了不错的解决方案。使用 std::stringstream
查看是否可以提取整数或浮点值。如果第一次尝试失败,您将需要 .clear()
它。
关于c++ - C++ 中的字符串、整数和 float 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34987446/