2016-01-25 13 views
1

BIG編輯:我加入並現在檢測到字符串輸入:)!在C++中的字符串,int和float驗證

if (false == isdigit(grade[0]) 

編輯:問題:無法確定如果我把一個字符串,而不是一個浮動或int。

我一直在尋找所有通過這個網站,並有很多關於檢查字符串輸入發佈。這是我試圖將我所學到的一切結合起來,正如你所看到的那樣,它並沒有做我想做的事情。

這些投入會發生什麼:

用戶輸入: 「1.2」:可以告訴它是一個浮動

用戶輸入: 「1」:可以告訴它是一個INT

用戶輸入:「一個「:錯誤:認爲這是一個浮動。這就是問題。如果我輸入'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

更簡潔地描述你的問題。你的問題具體是什麼? – Downvoter

+0

@cad我把編輯,我希望幫助的,但是因爲我現在打字,我的程序無法確定如果我把一個字符串,而不是一個浮動。 – Robolisk

+0

你的第一次測試沒有意義。如果輸入中的第一個字符是數字,爲什麼將它歸類爲字符串? – Mat

回答

0

很遠很容易準確地確定一個「浮動值」會是什麼。 +1.0E-02是一個浮點變量嗎?它裏面有一封信!

你幾乎得到了體面的解決方案。使用std::stringstream來查看您是否可以提取整數或浮點值。如果第一次嘗試失敗,您將需要.clear()

+0

我對C++環境還比較陌生,但我會仔細研究一下,看看我能做些什麼。感謝您的指導!任何發現我都會回覆你。 – Robolisk