2014-02-06 4 views
-1

У меня есть меню, которое я создал. У меня есть все опции, которые пользователь может пойти, чтобы увидеть что-то определенное, поэтому для продолжения работы с программой они должны ввести конец, чтобы перейти к следующему разделу кода. Но моя проблема в том, что когда они печатают конец, он превращает его в бесконечный цикл. Может кто здесь здесь код.Мне нужно закончить цикл 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; 

Этот код не извлекает вход в обоих option и dd. Оператор || не может использоваться как «труба». Скорее, вы можете цепи вызовы экстрактор с помощью >> во второй раз:

cin >> option >> dd; 

Кроме того, вы должны использовать std::string для dd, потому что сравнение C-строк сравнивает только их адреса, а не фактическое содержание.

0

Там вы можете нужно сравнить сырье C-Strings (char*) с strcmp(). Для сравнения, если dd == "done" использовать strcmp (dd, "done") == 0.

EDIT:

Для использования strcmp вы должны #include<cstring>

EDIT2: Как указано в других ответах и ​​комментариях, видя весь код будет лучше, чтобы изменить std::string. Но, если вы действительно хотите использовать char*, используйте strcmp для сравнения, как указано выше.

+1

Используйте std :: string вместо этого. –

+0

@Ed Heal 'std :: string' в этом случае (вещи, поступающие из потоков и т. Д.) Лучше. Я просто не хотел разорвать типы данных, которые использовал автор. –

+0

@ wesley.mesquita _'I просто не хотел разрушать типы данных, которые использовал автор. '' Вот почему я не сделал нисходящего ответа ... –

Смежные вопросы