【问题标题】:An IF statement right before nested IF-ELSE嵌套 IF-ELSE 之前的 IF 语句
【发布时间】:2017-08-14 18:34:33
【问题描述】:

我的问题是关于下面的 sn-p 是否被认为是好的程序结构。

if(speed > SPEED_LIMIT)
    printf("Speeding!\n");

if(speed >= 80)
{
    printf("A fine of $%d has been issued!\n", FINE_C);
}
else
    if(speed >= 70)

在进入嵌套的if-else 之前有一个基本的if 语句可以吗?

可能是个奇怪的问题,学习编程才第二周,我们的单元是 C。

【问题讨论】:

  • if-else 没有嵌套。
  • 是的,它更多地用作“else if(condition)”
  • 我剪掉了一些代码只是为了显示顶部,代码继续通过不同的精细级别,我认为这是嵌套的 if-else。
  • 尽管如此,您发布的代码没有任何嵌套的 if-else。只有最后一个 if 是嵌套的。
  • 虽然,这很好,并且产生更小的代码(很可能) - 一种更优化的方法是嵌入超速(假设速度限制包含在 if-else if 结构中) - 少一个检查条件(我假设打印发生在任何一种方式)

标签: c if-statement syntax


【解决方案1】:

是的,语法上没有问题。您可以将任意数量的if 语句和if-else 语句并排放置。它主要是关于代码的可读性和可维护性,需要替代可能的方法。

例如,更好的“分组”是

if (more than limit)
{
    if (more than higher limit) {...}
    else if (more than middle limit) {...}
    else {....}
}
else
{
    //normal
}

结束

if (more than limit) {...}
if (more than higher limit) {...}
else if (more than middle limit) {...}
else if {some other condition}
else
{
    //normal
}

【讨论】:

  • 感谢所有反馈。我不知道 else if 。这只是我们的第二个实验室,我认为导师更注重可读性,我在搜索时确实找到了一些替代方法,但我认为他可能希望我们坚持我们迄今为止所学的概念,因为一切都是新的.这就是为什么我想知道这个问题。这里的反应太快了……太疯狂了。
【解决方案2】:

是的,你经常看到。但是,格式化它的正常方法是不添加额外的缩进级别,并且将 else 和 if 放在同一行是正常的。这样您就可以在不离开屏幕右侧的情况下拥有任意数量的这些,即

if(speed >= 80)
{
    printf("A fine of $%d has been issued!\n", FINE_C);
}
else if(speed >= 70)
{ 
    // whatever
}
else if (speed >= 60)
{
    // whatever
}
else if (speed >= 50)
// etc

这就像 switch 语句的稍微灵活的版本。

编辑

我知道我回答错了问题。以上都很好,但是如果你问这样是否可以

if(speed > SPEED_LIMIT)
    printf("Speeding!\n");

if(speed >= 80) ...

那么是的,虽然如果限速超过80,逻辑就会出错,所以最好这样构造:

    if(speed > SPEED_LIMIT)
    {
        printf("Speeding!\n");

        if(speed >= 80) ...
    }

【讨论】:

    【解决方案3】:

    不,这样做没有问题。将这两个视为可分离的,无论条件是否满足这里唯一需要注意的是,如果第一个条件为真/假(无论如何),下一个 if 仍然被执行。如果下一个条件为真,那么它将被执行,否则将被忽略。

    直到你想要第二个条件,不管第一个是真还是假,让执行。

    【讨论】:

      【解决方案4】:

      这不一定是坏事,但是,在您的代码中保持一致是您应该从编程生涯开始时就自学的东西。 :)

      例如,您的所有 3 个 if 都可以像这样嵌套在 if/else 中,在我看来(以及许多其他程序员)看起来更时尚。

      if(speed > SPEED_LIMIT) {
          printf("Speeding!\n");
      } else if(speed >= 80) {
          printf("A fine of $%d has been issued!\n", FINE_C);
      } else {
          /* whatever happens when speed is greater or equal to 70 /*
      }
      

      一致性在大型项目中非常重要。不仅为自己,也为同事。例如,当执行相同操作的 2 个函数以不同的方式编写时,了解它们的功能需要更多的工作,但最终会意识到它们执行相同的操作。很令人沮丧,不是吗? ;)

      Here您可以找到一些编码约定,这些约定是您可以遵循的一些准则,当然,您的老师或将来您的公司可以为您提供其他必须遵循的约定。

      祝你好运!

      【讨论】:

      • “例如,你的所有 3 个 if 都可以像这样在嵌套的 if/else 中创建,在我看来(以及许多其他程序员)看起来更时尚。” 不,因为你改变了程序的语义。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多