2013-10-07 60 views
0

我是一個業餘的C++代碼練習,我無法讓我的代碼正常工作。我希望有人能夠找到我的問題或指出我的方向。無法正確驗證無效輸入並接受正確的範圍值與C++

我只是試圖創建一個開關/案例菜單供用戶選擇。我希望他們不能輸入任何不正確的值作爲輸入。唯一正確的值是1,2,3或4.如果輸入了更低,更大或非數字值,我希望它們在循環中停留,直到它們輸入正確的值。

我的工作錯誤檢查問題是,當他們實際上輸入正確的值,他們仍然卡在循環?!我嘗試重新安排我的代碼,但是這個錯誤再次炸燬了我的程序。

謝謝你的任何建議,代碼輸入等我不知道爲什麼它不工作!

並在相關說明。我有問題讓我的jgrasp下載正常工作的C++,所以我下載了一個名爲code :: block的編譯器。由於某些原因,它無法註冊系統(「」)命令?!任何想法或更好的編譯器將不勝感激。謝謝。哦,這裏是我的第一個問題的代碼...在代碼後我的開關/案例菜單開始。感謝您的幫助

int main() 
{ 
string name; 
int ans2, ans3, count = 0, extra, select = 1, arraycount = 0, choice; 
bool flag = true; 
cout << "Hello World" << endl; 
cout << "Enter your name: "; 
cin >> name; 
cout << "Thank you for using this program " + name << endl; 
while (select != 4) 
{ 
cout << "MAIN MENU\n"; 
cout << "Please enter a corrisponding numeric for your selection.\n"; 
cout << "1. You are Michael...\n"; 
cout << "2. You are Tim\n"; 
cout << "3. You are someone else\n"; 
cout << "4. Program exit\n"; 
cout << "Enter your selection: "; 
cin >> select; 

do 
{ 
while(!(cin >> select)) 
    { 
    cin.clear(); 
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
    cout << "Invalid input. Try again: "; 
} 
cout << "You entered: " << select << endl; 

if (select != 1 && select != 2 && select != 3 && select != 4) 
{ 
    flag = false; 
    cout << "Error. Please enter a valid selection."; 
    cout << "Enter your selection"; 
    cin >> select; 
} 
else 
    flag = true; 


}while(flag == false); 

cout << "\n\nThank you for your choice\n"; 
//system("pause"); 
//system("cls"); 
+1

http://www.parashift.com/c++-faq/istream-and-ignore.html – chris

+3

這個問題似乎是題外話,因爲它不是一個衆包調試論壇。這個問題及其答案不會對其他人有用。 –

回答

0

你的這部分代碼,

if (select != 1 && select != 2 && select != 3 && select != 4) 
{ 
    flag = false; 
    cout << "Error. Please enter a valid selection."; 
    cout << "Enter your selection"; 
    cin >> select; 
} 

這部分可能是你的問題的原因,你輸入的選擇再一次在這裏,但你不要修改標誌值。你可以檢查添加到while(!(cin >> select))作爲

while(!(cin >> select) || select > 4 || select < 1) 
+0

我試着在我之前添加我的!=參數。我會嘗試這樣。現在雖然......實際上做到了!我想我可能已經搞亂了我的&&和括號,當我嘗試之前。我敢打賭,我以某種方式搞砸了。非常感謝。您先生們都優化了我的代碼並保存了我的理智! – Odin1806