正如問題所述,出於某種原因,我的程序並未以目前無法識別的方式刷新輸入或使用變量。這是一門功課的項目,我已經超過了我爲它做,現在我只想程序實際工作:P輸入未清除
細節,使查找更容易:
程序執行完美無缺在第一次通過。所有拋出工作,只有適當的值(n> 0)被接受並變成二進制。
只要輸入我的終止輸入,程序進入一個循環,並只要求等,從而再次終止:
當我在我的Linux筆記本電腦上運行Netbeans的這個程序,我輸入終止值後程序崩潰。在Windows上的Visual C++中,它像上面描述的那樣進入循環。
在代碼中,我嘗試清除每個流,並在程序重新啓動時初始化每個變量,但無濟於事。我只是看不到我的錯誤。
我相信躺在無論是在主函數的錯誤:
int main(void)
{
vector<int> store;
int terminate = 1;
do
{
int num = 0;
string input = "";
if(cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
cout << "Please enter a natural number." << endl;
readLine(input, num);
cout << "\nThank you. Number is being processed..." << endl;
workNum(num, store);
line;
cout << "Go again? 0 to terminate." << endl;
cin >> terminate // No checking yet, just want it to work!
cin.clear();
}while(terminate);
cin.get();
return 0;
}
或在讀取號碼的功能:
void readLine(string &input, int &num)
{
int buf = 1;
stringstream ss;
vec_sz size;
if(ss.fail())
{
ss.clear();
ss.ignore(numeric_limits<streamsize>::max(), '\n');
}
if(getline(cin, input))
{
size = input.size();
for(int loop = 0; loop < size; ++loop)
if(isalpha(input[loop]))
throw domain_error("Invalid Input.");
ss << input;
ss >> buf;
if(buf <= 0)
throw domain_error("Invalid Input.");
num = buf;
ss.clear();
}
}
AAAAH,我認爲如果(cin.fail())將清除流,但是啊,這是一個邏輯錯誤^^謝謝! – IAE 2010-04-25 12:42:30