2012-05-13 87 views
4

我遇到了與我的if語句相互碰撞的問題。這裏是我的代碼:如果語句總是執行

std::cout << "1) Option 1\n"; 
std::cout << "2) Option 2\n"; 
std::cout << "3) Option 3\n"; 
std::cout << "4) Option 4\n"; 
std::cout << "Type your choice and hit ENTER \n"; 

std::cin >> Choice; 

if(Choice == 1); 
{ 
std::cout << "Blah Blah\n"; 
} 
if(Choice == 2); 
{ 
std::cout << "Blah Blah\n"; 
} 
if(Choice == 3); 
{ 
std::cout << "Blah Blah\n"; 
} 
if(Choice == 4); 
{ 
std::cout << "Blah Blah\n"; 
} 

通過運行到對方我的意思是:它會忽略我if報表和運行所有的我的代碼,所以它只是打印出:

Blah Blah 
Blah Blah 
Blah Blah 
Blah Blah 

什麼是我的錯誤?

+12

你的ifs後面有分號。 –

+1

而且,你應該閱讀你的編譯器警告。 – Inverse

回答

30

您的分號需要刪除,它們正在終止if語句。

if(Choice == 1) 
{ 
std::cout << "Blah Blah\n"; 
} 
if(Choice == 2) 
{ 
std::cout << "Blah Blah\n"; 
} 
if(Choice == 3) 
{ 
std::cout << "Blah Blah\n" 
} 
if(Choice == 4) 
{ 
std::cout << "Blah Blah\n"; 
} 

你也可以使用其他的ifs來清理你的代碼。

+1

謝謝噓!我覺得現在真的很笨。 – THUNDERGROOVE

+2

沒問題。我們都在某些時候做出了這些看似簡單的錯誤:) – Mansfield

+6

@THUNDERGROOVE看看你是否可以在你的編譯器上啓用更多的警告。例如在我的編譯器中,你的代碼給了我一大堆「警告:如果語句有空體[-Wempty-body]」,並直接指向冒犯的分號。 – bames53

5

爲什麼不在這裏使用switch語句?將真正清理你的代碼。

std::cin >> Choice; 

switch(Choice) 
{ 
case 1: 
std::cout << "Blah Blah\n"; 
break; 

case 2: 
std::cout << "Blah Blah\n"; 
break; 

case 3: 
std::cout << "Blah Blah\n"; 
break; 

case 4: 
std::cout << "Blah Blah\n"; 
break; 
} 
+0

如果他忘記了'break'陳述怎麼辦? – Inverse

+5

@反過來所有地獄'休息'鬆動 –

+0

@NiftyDude:+1爲優秀雙關 – MrWuf

1

除了分號限制if語句的範圍,我想建議你使用一個嵌套的if循環。他們執行起來更快。

+1

如果不是一個循環。我不明白他們是如何嵌套在這裏的,即使他們可以*執行起來也不會更快。 – Jon

1

;放在if條件之前,它將起作用。此外,由於選項是互斥的,最好把它像這樣:

if (Choice == 1) { 
    std::cout << "Blah Blah\n"; 
} else if (Choice == 2) { 
    std::cout << "Blah Blah\n"; 
} else if (Choice == 3) { 
    std::cout << "Blah Blah\n"; 
} else if (Choice == 4) { 
    std::cout << "Blah Blah\n"; 
} 

...或者使用switch,正如在其他的答案被指出。