2015-11-05 55 views
2

這裏mainopp()是我程序的主菜單功能。在執行此功能時,我總是收到一個錯誤

每當我輸入一個值,而不是1/2/3/4它顯示錯誤對話框,採取一個ch輸入(由於getch()) ,但然後而不是返回並重新運行相同的功能,它會以某種方式跳過提到'cin >> c'的部分,而是進入一個無限循環,即使輸出不正確。它只是顯示奇怪的對齊菜單和錯誤對話框。保持重複clrscr(),菜單和語句。

我確保這是使用delay()函數跳過的行。 我也試過把mainopp()的調用放在switch case外面,那也沒用。

然後我使用char c而不是int c來進行實驗,並將case切換爲單引號('),並發現它可以按照預期完美工作。 然後,我在cin >> c,c = getch(),c = getche()之間交替,發現它一切正常。

我得到的唯一問題是當我使用int數據類型而不是char時。 任何人都可以請解釋爲什麼我得到一個錯誤,當我使用int數據類型?

(用於agentinfo(),更新()和信貸()的原型是在我的代碼如上所述,這和按預期正常工作。)

這是函數:


void mainopp() 
{ 
    int c; 
    cout<<endl<<endl<<endl<<"\t \t \t \tTHE AGENCY"; 
    cout<<endl<<endl<<"\t \t \t 1.AGENT INFORMATION \n"; 
    cout<<"\t \t \t 2.UPDATE RECORDS \n"; 
    cout<<"\t \t \t 3.CREDITS \n"; 
    cout<<"\t \t \t 4.EXIT \n\n"; 
    cout<<"\t \t \t Enter your choice: "; 
    cin>>c; 
    switch(c) 
    { case 1 :agentinfo(); 
      break; 
     case 2 :update(); 
      break; 
     case 3 :credits(); 
      break; 
     case 4 :exit(1); 
     default:cout<<"\t \t \tWrong selection !! Enter Again"; 
      getch(); 
      clrscr(); 
      mainopp(); 
    } 
} 
+4

夥計......你是遞歸調用mainopp()!我想你想要的是一段時間(1)循環;) – Michael

回答

1

你不能真的叫你這樣主......你會有一個遞歸錯誤。你應該試試這個:

void mainopp() 
{ 
int c; 
bool Valid = false; 
while(!Valid) 
{ 
cout<<endl<<endl<<endl<<"\t \t \t \tTHE AGENCY"; 
cout<<endl<<endl<<"\t \t \t 1.AGENT INFORMATION \n"; 
cout<<"\t \t \t 2.UPDATE RECORDS \n"; 
cout<<"\t \t \t 3.CREDITS \n"; 
cout<<"\t \t \t 4.EXIT \n\n"; 
cout<<"\t \t \t Enter your choice: "; 
cin>>c; 
Valid = true; 
switch(c) 
{ case 1 :agentinfo(); 
     break; 
    case 2 :update(); 
     break; 
    case 3 :credits(); 
     break; 
    case 4 :exit(1); 
    default:cout<<"\t \t \tWrong selection !! Enter Again"; 
     clrscr(); 
     Valid = false; 
} 
} 
} 

這個例子將循環直到用戶輸入一個有效的選擇。如果你想運行它,直到用戶選擇退出,添加另一個選擇(另一種情況),並在此選項中更改布爾值。對於無限循環,只需使用while(1)即可。

+0

@邁克爾是的我遞歸地調用函數,它對某個字符對象有效,但出於某種原因不是整數對象,我想知道這個異常:/ 無論如何,謝謝。 :D – NSachdeva

+0

謝謝你的代碼。但我的代碼確實工作,只是以某種方式與整數對象c短小。否則它會按我的需要完美地工作。你能否也請提一下爲什麼我只有整型數據類型纔會出錯? :/ 無論如何,謝謝。 :D – NSachdeva

+0

做了很久,我還沒有完成C++ tbh。也許cin >>註冊爲字符串或字符,所以你試圖強制一個字符串(或字符)到一個int,這可能會導致一些錯誤?嘗試使用浮動,並查看錯誤是否再次發生。 – MacGruber

相關問題