Пока цикл повторяется - PullRequest
       20

Пока цикл повторяется

0 голосов
/ 22 сентября 2011

Я устанавливаю цикл while, в котором я хочу выбрать r или h, я не хочу использовать forloops, но я хочу использовать переключатель, почему, когда я ввожу r или h, он повторяет миллион раз cout для этого случая?Я не могу заставить его просто сказать это однажды ..

while (chooseMove == 'r' or 'h')
{
    switch (chooseMove) 
    {
    case 'r':
            cout << "you chose r";

        break;
    case 'h':
        cout << "you chose h";
        break;
    }




} 

Я также попробовал это с forloops и у меня была та же проблема, я не могу понять это

Ответы [ 5 ]

5 голосов
/ 22 сентября 2011

То, что вы имеете в виду, это while (chooseMove == 'r' or chooseMove == 'h'). То, что вы сейчас написали, эквивалентно ((chooseMove == 'r') or ('h')), а 'h' оценивается как true.


Возможно, вы также просили помощи с логикой ввода:

char c;
bool success = false;

while (std::in >> c)
{
  switch(c) {
    case 'r': /* ... */ success = true; break;
    case 'h': /* ... */ success = true; break;
  }

  if (success) break;
}

Это также прекратится, если входной поток закрыт, и вы можете использовать success для проверки успешности операции.

2 голосов
/ 22 сентября 2011

Потому что это то, что вы запрограммировали для этого.

Если вы хотите, чтобы цикл остановился или сделал паузу (и, скажем, дождитесь ввода), вы должны добавить этот код в цикл.

while (chooseMove == 'r' or chooseMove == 'h')
{
    switch (chooseMove) 
    {
    case 'r':
            cout << "you chose r";

        break;
    case 'h':
        cout << "you chose h";
        break;
    }
    std::cin >> chooseMove;  //stop and wait for more input
}
0 голосов
/ 22 сентября 2011
while (chooseMove == 'r' or 'h')

что эквивалентно этому:

while ( (chooseMove == 'r')  or true)
//same as while ( (chooseMove == 'r')  || true)

Так что это бесконечный цикл. Обратите внимание, что or и || - это одно и то же.

То, что вы хотите, это:

while ( (chooseMove == 'r')  or (chooseMove == 'h'))
//same as while ( (chooseMove == 'r')  || (chooseMove == 'h'))
0 голосов
/ 22 сентября 2011

Что означает chooseMove == 'r' or 'h'? По мнению C ++ стандартно, это сгруппировано как (chooseMove == 'r') or ('h'); неявное преобразование 'h' в bool затем приводит к (chooseMove == 'r') or ('h' != 0). Второе условие всегда будет верным.

0 голосов
/ 22 сентября 2011

Это проблема:

while (chooseMove == 'r' or 'h')

Попробуйте вместо этого:

while ((chooseMove == 'r') || (chooseMove == 'h'))

Когда вы пишете (как это вообще компилируется? or не C ++):

chooseMove == 'r' or 'h'

Это интерпретируется как:

(chooseMove == 'r') or ('h')

Оператор 'h' всегда верен, поэтому цикл while выполняется вечно.

...