2017-02-11 10 views
0

Я создал код, который запрашивает переменную сумму, а затем просит ввести каждую переменную, а затем сохранит ее в векторе. Проблема, с которой я сталкиваюсь, заключается в том, что когда вы вводите что-то неправильное, и оно просит вас попробовать еще раз, оно либо просит вас ввести переменную определенное количество раз в зависимости от введенных вами символов, что действительно странно. Я думал, что использование ssinput.clear(); разрешит это, но это не так.Почему это в то время как петля выдает очень странные вещи?

Например, если я напечатал эти вещи в Терминал:

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 

В целом он был очень sporatic и странно. Мой код ниже.

#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

Минимальный код .... У вас есть две очень большие петли ... сжимайте ее до той, с которой у вас возникла проблема, и не добавляйте все библиотеки jesus ... –

+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

Какие расчеты вы планируете делать? Чтобы сохранить как переменные, так и значения переменных, я бы использовал два вектора. Опять же, я не уверен, что именно вы хотите сделать. –

 Смежные вопросы

  • Нет связанных вопросов^_^