2015-05-31 29 views
0

我在執行代碼時發生了一些麻煩。 這是關於一個接口類,用於驗證用戶輸入的值。我使用Visual Studio 2012執行Do-While循環期間錯誤的值C++

int Interface::requestOption(){ 
int option; //El problema está aquí 
do{ 
    cout<<"--------------------------------"<<endl; 
    cout<<"Type an option..."; 
    cin>>option; 
    if(option<1 || option>8){ 
     cout<<"Invalid value, type again "<<endl; 
     Sleep(2000); 
     system("cls"); 
     menu(); 
    } 
}while(!(option>0 && option<9)); 
return option; 

}

如果我使用的方法是第一次,它返回其實我鍵入的值。但是當我再次調用它時,我調試時,我注意到選項的值是-893453,並且它不允許我鍵入另一個數字(cin >>選項不起作用)。

的方法被調用到下一個方法中的互動:

void Control::studentsControl(){ 
int op; 
do{ 
    system("cls"); 
    interEst->menu(); 
    op = interEst->requestOption(); 
    Lista<Students>* students= NULL; 
    students = U->getStudents(); 
    switch(op){ 

    //Eight options 
    //The 8th option is to return to the previous menu. 

}while(op != 8); 

}

+0

實際輸入是什麼?如果流由於輸入無效而被設置爲失敗狀態,則可能需要調用'cin.clear()'。 –

+0

當在「無效值」之後打印'option'的實際值時,簡化版本在我的手中工作(順便說一句,告訴用戶什麼是無效值是個好主意!)。去掉了Sleep(),system(),menu()調用。常見問題:「哪個平臺,哪個編譯器?」也適用。 –

+0

我編輯了這個問題,以便您可以看到在哪個上下文中調用該方法。 @ user465139 – artavia23

回答

1

呼叫std::cin.clear()後每次迭代之前進入新的價值。

0

!(option>0 && option<9)True對於-893453!(False && True) == !False == True。爲什麼不在if語句中使用(option<1 || option>8)