2014-02-06 132 views
-1

我有一個我創建的菜單。我有所有的選項,用戶可以去看到某些特定的東西,所以爲了讓他們繼續使用該程序,他們必須鍵入end以繼續下一部分代碼。但我的問題是,當他們輸入結束時,它會變成一個無限循環。這裏有人可以在這裏的代碼。我需要結束Do-While循環

int var = 1; 
    int main=1; 
    char dd[] = "done"; 

     do 
     { 
      cout << "\n\n\nEnter the number of one of the following and I will explain!\n"; 
      cout << "1.integer 2.boolian 3.floats 4.doubles 5.character"; 
      cout << "\n\n[when you are done type 'done' to continue]\n\n"; 
      cin >> option || dd; 

      if (option == 1) 
      { blah blah blah blah 
      } 


      else if (option ==2) 
      { 
      blah blah blah 
      } 

      else if (dd=="done") //when user types 'done' it goes into infinite loop. 
       { break;} 

     while (var==1); 
+0

你覺得'cin >>選項|| dd;'是嗎? – interjay

+1

你不能比較字符串,如「dd ==」done「。 – OldProgrammer

回答

1
cin >> option || dd; 

此代碼不提取輸入到兩個optiondd。運營商||不是像「管道」那樣使用的東西。相反,你可以鏈接調用提取使用>>第二次:

cin >> option >> dd; 

此外,你應該使用std::stringdd因爲比較C字符串只比較它們的地址,而不是實際的內容。

0

您需要同時原C字符串(char*)與strcmp()比較後。若要比較dd ==「完成」,請使用strcmp(dd,「done」)== 0。

編輯:

要使用strcmp你應該#include<cstring>

EDIT2:在其他的答案和評論所指出的,看到整個代碼會更好更改爲std::string。但是,如果您真的想繼續使用char*,請使用strcmp進行上述比較。

+1

使用std :: string代替 –

+0

@Ed heal'std :: string'在這種情況下(來自流等的東西)比較好。我只是不想破壞作者使用的數據類型 –

+0

@ wesley.mesquita _'我只是不想打破作者使用的數據類型。'_這就是爲什麼我沒有downvote你的答案... –