mayashah Ответов: 3

Проблема с переключателем ! ! !


В принципе, я думаю, что у меня есть проблема с переключателем, когда я нажимаю 1, дело начинается, но когда я нажимаю 2, оно должно быть, но это не так, в чем проблема !!

Что я уже пробовал:

	char answer;
		int choice;
		do
		{
			system("cls");
			system("Color F ");
			cout << "\t|  --------------------------------- |" << endl;
			cout << "\t|  Press 1 for Palying Game.    |" << endl;
			cout << "\t|  Press 2 Exit				   |" << endl;
			cout << "\t|  Enter Your Choice            |" << endl;
			cout << "\t|  -----------------------------|" << endl;
			cout << "\t   \t";
			cin >> choice;    //this 
			switch (choice)
			{
			case 1:
			{
				system("cls");
				system("color E");
				t.org();
			}
			break;
			case 2:
				default:
				break;
			}
		} while (choice == 2);
	}
	return 0;
}

Richard MacCutchan

случай 2 ничего не делает.

Ayodeji Oluwatomiwo

перерыв после первого случая прекратит дальнейшие проверки
Попробуйте это и отправьте обратно, если это работает, чтобы я мог перепечатать как решение или есть какая-либо ошибка для исправления.

char answer;
      int choice;
       do
        {
         system("cls");
            system("Color F ");
           cout << "\t|  --------------------------------- |" << endl;
           cout << "\t|  Press 1 for Palying Game.    |" << endl;
            cout << "\t|  Press 2 Exit                   |" << endl;
          cout << "\t|  Enter Your Choice            |" << endl;
            cout << "\t|  -----------------------------|" << endl;
            cout << "\t   \t";
          cin >> choice;    //this 
           switch (choice)
           {
         case 1:
           {
             system("cls");
                system("color E");
                t.org();
                break;
          }
         case 2:
         {
              //your code for exit
              break;
         }
         default:
          //your code if no case is found also optional
     } while (choice == 2);
    }
 return 0;
}

3 Ответов

Рейтинг:
27

OriginalGriff

Гм...это какой - то странный код-и сильно помятый! Вы должны попытаться сделать правильный отступ, это делает чтение кода намного, намного проще. И если вы собираетесь использовать фигурные скобки вокруг кода обращения, то поместите их вокруг всего кода, а не только его части - это просто выглядит неправильно и сбивает с толку.
чар ответ;
int выбор;

do
    {
    system("cls");
    system("Color F ");
    cout << "\t|  --------------------------------- |" << endl;
    cout << "\t|  Press 1 for Playing Game.         |" << endl;
    cout << "\t|  Press 2 Exit                      |" << endl;
    cout << "\t|  Enter Your Choice                 |" << endl;
    cout << "\t|  --------------------------------- |" << endl;
    cout << "\t   \t";
    cin >> choice;    //this 
    switch (choice)
        {
        case 1:
            {
            system("cls");
            system("color E");
            t.org();
            break;
            }
        case 2:
        default:
            break;
        }
    } while (choice == 2);
Видите, насколько яснее то, что происходит?
Я бы также предложил, чтобы код внутри кейса был как можно короче - поэтому переместите код "play game" в отдельную функцию и просто вызовите ее внутри кейса. Это делает функцию меньше и легче читать, понимать и поддерживать.

Теперь ... о самом коде...
Цикл будет выполняться один раз, если только пользователь не нажмет 2 для выхода, и в этом случае он будет повторяться снова. Наверное, вы хотите:
} while (choice != 2);
Это может решить вашу проблему!


mayashah

Исправлено !! Спасибо Вам Всем !!! но какой-то другой проблемой сталкивается

mayashah

Когда я запускаю эту часть кода, он не возвращает код обратно!!

ch = _getch (); / / считывание символа с экрана
в то время как (ch != 13)
{//символ 13-enter

если (ch = = 8)
{

pasword = pasword. substr(0, (pasword.длина ()) - 1);
//for(int i=0;i & lt;password.length (); i++)
//cout <<'*';
}
ещё
{
пароль.push_back(ч);
cout <<'*';
}
ч = _getch();
}

mayashah

почему я имею в виду, что когда я ввожу пароль, он только вводит пароль, но не возвращает его обратно, если я хочу его удалить ??

OriginalGriff

Попробовать здесь:
https://www.google.co.uk/search?q=getch+and+passwords&oq=getch+and+passwords&aqs=chrome..69i57.5043j0j7&sourceid=chrome&ie=UTF-8

mayashah

есть так много ссылок, которые вы можете проследить с той, которая работает со мной

OriginalGriff

:смеяться:
Нет! Мы понятия не имеем, что такое ваша система, и мы здесь не для того, чтобы делать все это за вас.
Поэтому следуйте за некоторыми, читайте их и смотрите, подходят ли они.

mayashah

можете ли вы исправить мою вышеприведенную функцию, потому что вещи, которые там работают, меня не устраивают

mayashah

Сделано сэр :)

Рейтинг:
14

Jochen Arndt

Проблема в том, что ваш do while цикл продолжается, пока choice это 2 и ломается, если это что-то еще.

Так наверное и должно быть:

do
{
    // ...
} while (choice != 2);


Рейтинг:
1

Patrice T

Цитата:
когда я нажимаю 2, это должно быть, но это не так
Он должен, но не делает что ?

Вы должны научиться использовать отладчик как можно скорее, это невероятный инструмент обучения. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.