Застрял в операторе if в цикле while - PullRequest
0 голосов
/ 12 марта 2011

Может кто-нибудь заметить мою ошибку в этом цикле?После того, как я прочитал в ответ, я, кажется, застрял в утверждениях If.Кроме того, установка прерывания для выхода из цикла без выполнения условия, по-видимому, приводит к ошибке: «Ожидаемое первичное выражение перед другим»

Код:

    while (rowNum > (FC_Row))
    {
        cout << "That row is not located in our first class section. Would you like to change your class so you can sit in that row (Y/N)?" << endl;
        cin >> reply;
        reply = toupper(reply);
        while (reply != 'Y' && reply !='N')
        {
            cin.clear();
            while(cin.get()!='\n');
            cout << "Please indicate your answer with Y (yes) or N (no)." << endl;
            cout << "try again:" << endl;
            cin >> reply;                               
            reply = toupper(reply);
        }

    if (reply == 'Y')
       {
        ticketType = 'E';
        break;
       }
    else
      {
       cout << "Then choose a row numbered 1-" << (FC_Row) << endl;
       cin >> rowNum;
      }

    }

Спасибо, ребята, надо посмотреть эти скобки.

Ответы [ 9 ]

4 голосов
/ 12 марта 2011

Вам нужны фигурные скобки, и для замены = на == в состоянии if:

if (reply == 'Y')
{
    ticketType = 'E';
    break;
}
else
{
    cout << "Then choose a row numbered 1-" << (FC_Row) << endl;
    cin >> rowNum;
}
3 голосов
/ 12 марта 2011

Вам не хватает {}, и вы используете = там, где хотите ==

if (reply == 'Y') {
      ticketType = 'E';
      break; 
} else {
      cout << "Then choose a row numbered 1-" << (FC_Row) << endl;
      cin >> rowNum;
}

Увеличьте уровень предупреждений компилятора и убедитесь, что код компилируется без предупреждений.Проблема if (reply = 'Y') была бы замечена и предупреждена большинством компиляторов.

0 голосов
/ 13 марта 2011

Хорошая уловка, чтобы избежать ошибки =, когда вы хотите == и сравниваете ее с константой литерала, - инвертировать выражение в

'Y' == ответить

Если вы используете только =, это даст ошибку компиляции

0 голосов
/ 12 марта 2011

Я вижу три проблемы с вашим кодом.

Во-первых, вы используете if (reply = 'y'). = - это оператор присваивания в C ++, а не оператор сравнения. Вы хотите if (reply == 'y').

Во-вторых, ваши отступы и скобки испорчены. Помните, что правильная форма такова:

if (condition)
{
    // Stuff
}

Если вы не делаете только одну вещь внутри утверждения (а вы нет).

В-третьих, у вас есть точка с запятой в while(cin.get()!='\n');. Убей это. Точка с запятой должна быть только после while, если она является частью цикла do while.

0 голосов
/ 12 марта 2011
 if (reply = 'Y') //assignment

Это делает назначение в if.Сделай это ==.

if (reply == 'Y') //comparison!
0 голосов
/ 12 марта 2011

Вы делаете

if (reply = 'Y') //Should be reply=='Y'
ticketType = 'E';

reply = 'Y' всегда будет верным, поэтому вы всегда вводите условие if ().

0 голосов
/ 12 марта 2011

Что, по-вашему, означает if (reply = 'Y')?Если вы не уверены, подумайте о том, что означает reply = 'Y', затем подумайте, что это означает то же самое внутри if.

0 голосов
/ 12 марта 2011

Вам нужны фигурные скобки вокруг операторов рядом с 'if'

                    if (reply = 'Y')
                    {
                        ticketType = 'E';
                        break; // I want this to exit the while loop, I get a syntax error from this break.
                    }
                    else
                    {
                        cout << "Then choose a row numbered 1-" << (FC_Row) << endl;
                        cin >> rowNum;
                    }
0 голосов
/ 12 марта 2011
if (reply = 'Y')
 {
ticketType = 'E';
break; // I want this to exit the while loop, I get a syntax error from this break.
}
else
{
cout << "Then choose a row numbered 1-" << (FC_Row) << endl;
 cin >> rowNum;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...