C ++中的string,int和float验证

时间:2016-01-25 07:45:22

标签: c++ validation input

大编辑:我添加了它现在检测到字符串输入:)!

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

1 个答案:

答案 0 :(得分:0)

确切地确定“浮动值”是多么容易。 +1.0E-02是浮点变量吗?它上面有一封信!

你几乎得到了体面的解决方案。使用std::stringstream查看是否可以提取整数或浮点值。如果第一次尝试失败,您将需要.clear()