формат if / else внутри цикла while - PullRequest
0 голосов
/ 22 октября 2010
while(true)
{ 
  cout << "Name: ";
  getline(cin, Name);
  if(Name == "Stop")
    break;

  cout << "Additional Name - Y/N: ";
  getline(cin, additional);
  if (additional == "Y") 
    cout << "Additional Name: ";
  getline(cin, Name2);
  else
    cout << "Location: ";
  getline(cin, Location);
  if(Location == "Stop")
    break;
}


chief.cpp: In member function ‘void BookList::Fill()’:
chief.cpp:128: error: ‘else’ without a previous ‘if’

После того, как пользователь введет первое имя, я хотел бы дать возможность ввести второе имя. Если «N», просто перейдите к «Location», если «Y», перейдите к «Name2» и затем к «Location».

Ответы [ 4 ]

5 голосов
/ 22 октября 2010

Вы должны заключить операторы между if и else в скобках { ... }.

4 голосов
/ 22 октября 2010

Вы должны добавить фигурные скобки здесь:

if (additional == "Y") 
     cout << "Additional Name: ";
      getline(cin, Name2);
else
     cout << "Location: ";
     getline(cin, Location);

Попробуйте:

if (additional == "Y") 
{
     cout << "Additional Name: ";
     getline(cin, Name2);
}
// You could have an else here, but that would make location only happen if "additional" was not "Y"

 cout << "Location: ";
 getline(cin, Location);

Я подозреваю, что вы всегда хотите, чтобы следующие строки (получение местоположения) происходили, поэтому в этом случаебольше ничего не требуется.

0 голосов
/ 22 октября 2010

Вы можете отказаться от скобок ({ и }) вокруг блоков, когда блок содержит ровно одну инструкцию (что-то, заканчивающееся точкой с запятой (;)) или другую инструкцию с блоком (if,for, while и т. Д.).

Например, вы можете сделать это:

while (true)
    if (foo) {
        printf("Hello, ");
        printf("world\n");
    }

или даже

while (true)
    if (foo)
        for (i = 0; i < 10; i++) {
            printf("Hello, ");
            printf("World!\n");
        }

Но в вашем кодевам необходимо использовать фигурные скобки, поскольку ваш оператор if содержит два оператора перед оператором else.Следовательно, оператор if заканчивается после строки cout.

Конечный результат должен выглядеть примерно так:

if (additional == "Y") {
   cout << "Additional Name: ";
   getline(cin, Name2);
}
else {
   cout << "Location: ";
   getline(cin, Location);
}
0 голосов
/ 22 октября 2010

Вам нужно заключить тело if в фигурные скобки, чтобы избавиться от ошибки. Судя по всему, вам также необходимо заключить тело else в фигурные скобки:

if (additional == "Y") {
  cout << "Additional Name: ";
  getline(cin, Name2);
 } else {
  cout << "Location: ";
  getline(cin, Location);
 }
...