大编辑:我添加了它现在检测到字符串输入:)!
if (false == isdigit(grade[0])
编辑:问题:无法确定我是否放入了字符串而不是float或int。
我一直在浏览这个网站,有很多关于检查字符串输入的帖子。以下是我尝试将我学到的所有内容结合起来,正如您所看到的,它并没有按照我的意愿去做。
这样的输入和发生的事情:
用户输入:“1.2”:可以告诉它是一个浮动
用户输入:“1”:可以告诉它是一个int
用户输入:“a”:错误:认为它是一个浮点数。这就是问题。如果我输入'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;
}
答案 0 :(得分:0)
确切地确定“浮动值”是多么容易。 +1.0E-02
是浮点变量吗?它上面有一封信!
你几乎得到了体面的解决方案。使用std::stringstream
查看是否可以提取整数或浮点值。如果第一次尝试失败,您将需要.clear()
。