【问题标题】:if statements always executeif 语句总是执行
【发布时间】:2012-12-07 01:47:54
【问题描述】:

我的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

我的错误是什么?

【问题讨论】:

  • ifs 后面有分号。
  • 而且,您应该阅读编译器警告。

标签: c++ visual-c++ if-statement


【解决方案1】:

您的分号需要删除,它们正在终止 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";
}

您也可以使用 else if 来清理您的代码。

【讨论】:

  • 没问题。我们都曾在某些时候犯过这些看似简单的错误:)
  • @THUNDERGROOVE 查看是否可以在编译器上启用更多警告。例如,在我的编译器上,您的代码给了我一堆“警告:if 语句的主体为空 [-Wempty-body]”,并直接指向有问题的分号。
【解决方案2】:

你为什么不在这里使用 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;
}

【讨论】:

  • 如果他忘记了break 语句怎么办?
  • @Inverse 然后全是地狱breaks 松散
【解决方案3】:

除了分号限制你的 if 语句的范围,我想建议你使用一个嵌套的 if 循环。它们的执行速度更快。

【讨论】:

  • 如果不是循环。我看不出它们如何嵌套在这里,即使它们可以肯定执行起来也不会更快。
【解决方案4】:

; 放在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,正如其他答案中所指出的那样。

【讨论】:

    猜你喜欢
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 2016-03-03
    相关资源
    最近更新 更多