我有一個程序可以做三件事。詢問你想要多少個變量,要求你輸入每個變量,然後將其存儲在一個向量中。我已經放了一些代碼來檢查您的輸入是否正確,如果不正確,請重新循環代碼以詢問您的變量。我遇到的問題是,當你在第二個變量周圍輸入任何東西時,它會要求你無限次地嘗試。無論你輸入什麼內容,爲什麼while循環都輸出相同的內容?
舉例來說,如果我輸入這些值輸入:
Variable amount: 5
Please input variable 1: 8
Please input variable 2: 8
ERROR, PLEASE ENTER ONLY VALID SYMBOLS
---------------------
Please input variable 2:
這樣可以保證輸出ERROR, PLEASE ENTER ONLY VALID SYMBOLS
一遍又一遍,不管你輸入的內容。代碼在下面,如果你對這個問題有更好的名字,請告訴我。 (我真的不知道該怎麼稱呼它)
#include <iostream>
#include <cmath>
#include <string>
#include <algorithm>
#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 = 0;
int choice = 0;
vector<int> userNums;
double input = 0;
string checktotVar = "";
string checkInput = "";
string sym = "";
bool valid = false;
stringstream sstotVar;
stringstream ssinput;
if (choice != 6) {
while (!valid) {
valid = true;
// Ask user for how many variables they want then record it
cout << "Variable amount: ";
getline(cin, checktotVar);
sstotVar << checktotVar;
sstotVar >> totVar;
if (sstotVar.fail() || totVar <= 0) {
inputErrorMessage();
valid = false;
sstotVar.clear();
sstotVar.ignore();
}
}
valid = false;
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);
ssinput << checkInput;
ssinput >> input;
if (ssinput.fail()) {
inputErrorMessage();
valid = false;
ssinput.clear();
ssinput.ignore();
}
if (valid == true) {
userNums.push_back(input);
varNum++;
}
}
}
}
}
我建議你學習如何使用你的調試器。請在將來除了解決這個問題之外,還會幫助你。 – Fureeish
另外,請注意,您不需要在函數的開頭部分聲明所有變量。代碼通常更容易閱讀和理解變量聲明接近它們的使用位置。 –