2017-02-11 86 views
0

我創建了一些代碼,要求您輸入一個變量,然後要求您輸入每個變量,然後將其存儲在一個向量中。我遇到的問題是,當你輸入不正確的東西,並要求你再試一次時,它要麼根據你輸入的字符輸入變量一定的次數,這真的很奇怪。我認爲使用ssinput.clear();會解決這個問題,但事實並非如此。爲什麼while循環輸出很奇怪的東西?

舉例來說,如果我打這些東西到下面的終端:

Please input variable 1: a 

ERROR, PLEASE ENTER ONLY VALID SYMBOLS 
--------------------- 
Please input variable 1: 1 
Please input variable 1: 3 
Please input variable 1: 5 
Please input variable 2: 1 
Please input variable 3: 4 
Please input variable 4: 3 
Please input variable 5: 3 

總的來說它是非常散發性和陌生。我的代碼在下面。

#include <iostream> 
#include <string> 
#include <vector> 
#include <sstream> 

using namespace std; 

int inputErrorMessage(){ 

    cout << "\n ERROR, PLEASE ENTER ONLY VALID SYMBOLS \n"; 
    cout << "--------------------- \n"; 

return 0; 

} 
int main(){ 

// Declare the variables, vectors, etc. 
int varNum = 1; 
int totVar = 5; 
vector<double> userNums; 
double input = 0; 
string checkInput = ""; 
bool valid = false; 
stringstream sstotVar; 




    while(!valid){ 

     valid = true; 

     // Ask the user for each variable, then record it into the array 
     for (int i = 0; i < totVar; ++i) { 
      cout << "Please input variable " << varNum << ": "; 
      getline(cin, checkInput); 
      stringstream ssinput(checkInput); 
      ssinput >> input; 

      if (ssinput.fail()) { 
       inputErrorMessage(); 
       valid = false; 
      } 

      if (valid == true) { 
       userNums.push_back(input); 
       varNum++; 
      } 

       ssinput.clear(); 

      } 
     } 
} 
+0

最小代碼....你有兩個非常大的循環...將它縮小到你遇到問題的那個循環,並且不要添加所有庫耶穌... –

+0

好吧,我會這樣做 – PeteMcGreete

+0

它會讓你更容易給你一個很好的答案。 –

回答

0

的問題奠定了在這些語句

vector <double> userNums; 

double input = 0; 

...

ssinput >> input; 

if (ssinput.fail()) 

檢查,看是否包含輸入十進制數。這就是你不能輸入字符的方式。

看看這個。編譯並運行...

#include <iostream> 
#include <string> 
#include <vector> 
#include <sstream> 

using namespace std; 

void inputErrorMessage(){ 

    cout << "\n ERROR, PLEASE ENTER ONLY VALID SYMBOLS \n"; 
    cout << "--------------------- \n"; 
} 


int main(void) { 

// Declare the variables, vectors, etc. 
int varNum = 1; 
int totVar = 5; 
vector<string> userNums; 
string input = ""; 
string checkInput = ""; 
bool valid = false; 
stringstream sstotVar; 




    while(!valid){ 

     valid = true; 

     // Ask the user for each variable, then record it into the array 
     for (int i = 0; i < totVar; ++i) { 
      cout << "Please input variable " << varNum << ": "; 
      getline(cin, checkInput); 
      stringstream ssinput(checkInput); 
      ssinput >> input; 

      if (ssinput.fail()) { 
       inputErrorMessage(); 
       valid = false; 
      } 

      if (valid == true) { 
       userNums.push_back(input); 
       varNum++; 
      } 

       ssinput.clear(); 

      } 
     } 
} 
+0

有什麼辦法可以將矢量轉換爲數字嗎?我後來用它們來做一些計算。 – PeteMcGreete

+0

你打算做什麼計算?要存儲變量和變量值,我會使用兩個向量。然後再次,我不確定你想要做什麼。 –