2010-10-22 81 views
0
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」只是跳到位置,如果「Y」轉到Name2然後到位置。while循環內的if/else格式

+0

如果你想顯示在列表上線128,雖然你沒有得到有用的答案這將是有益的。 – 2010-10-22 20:10:50

回答

5

您必須將ifelse之間的語句括在方括號{ ... }中。

4

這裏需要加括號:

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

您需要將括號中的if正文放在括號中以擺脫該錯誤。通過它的外觀,你還需要附上else體中括號:

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

當塊只包含一個聲明,您只能丟棄各地塊的大括號({})(東西結尾用分號( ;))或另一個語句塊(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); 
}