2015-09-28 29 views
1

請原諒任何業餘錯誤,我對此仍然很陌生。對於我的課程,我們需要將雙輸入轉換爲字符串以用於項目的不同部分。整數的驗證工作得很好,我試圖使用這個前面的問題Validating a double in c++ 的一些代碼,但很多我很懊惱,它沒有工作。C++驗證字符串中的雙精度

這裏是我的代碼:

string input; 
bool valid; 
double num; 

//Verification of valid inputs 
do 
{ 
    valid = true; 
    cout << "What is the " << name << " rate of the population? (% per year): "; 
    getline(cin, input); 
    num = input.length(); 

    if (num == 0) 
    { 
     cout << "\nNo data was entered, please enter a number.\n"; 
     valid = false; 
    } 
    else 
    { 
     for (double i = 0; i < num; i++) 
     { 
      if (input.at(i) < '0' || input.at(i) > '9') 
      { 
       cout << "\nPlease enter a valid, positive number.\n"; 
       valid = false; 
       break; 
      } 
     } 
    } 
} while (valid == false); 
return stod(input); 

感謝。

編輯: 我剛剛發現這個How do i verify a string is valid double (even if it has a point in it)?,我可以放心地說我不知道​​發生了什麼。

+1

最後一個參考(http://stackoverflow.com/a/29169409/464581)中的答案只是使用'std :: stod',很好。簡單。即使您不明白,您也可以*使用*該功能。 ;-) –

+2

如何使用['std :: stod'](http://en.cppreference.com/w/cpp/string/basic_string/stof)或['std :: strtod'](http:// en.cppreference.com/w/cpp/string/byte/strtof)? [示例這裏](http://stackoverflow.com/a/32792825/440558)(用整數,但仍然是相同的原理)。 –

+0

我嘗試使用http://stackoverflow.com/questions/32792790/read-whether-int-or-string-using-the-file-extraction-operator/32792825#32792825的例子,它打破了我的程序=( – Bowski

回答

0

爲什麼你使用double作爲字符串的索引?另外,我會跳過使用++增加一倍。

+0

教練向我們展示瞭如何做到這一點,以及他希望我們如何做到這一點。我在網絡上發現的大多數內容顯示了完全不同的做法,但我堅持這樣做= – Bowski

+0

你可以做到這一點,但切換到一個'int'而不是 – rockworm

+0

現在你正在驗證,你只有你的輸入字符串中的數字,你將如何驗證小數點? – rockworm

0

想通了。

只需要添加一些if語句。

if ((input.at(i) < '0' || input.at(i) > '9') && input.at(i) != '.') 
      { 
       cout << "\nError! illegal character was entered.\n"; 
       valid = false; 
       break; // 12w345 

       if (input.at(i) == '.') 
        ct++; 

       if (ct > 1) 
       { 
        cout << "Error! Only one dot allowed."; 
        valid = false; 

ct是一個整數,其值爲0來計算點並確保只輸入一個點。