【问题标题】:'else' without a previous 'if''else' 没有前面的 'if'
【发布时间】:2015-02-04 15:33:43
【问题描述】:

我刚刚开始学习 C 编程,所以我还没有真正达到高级水平。忍受我!

我有这段代码,我想很容易理解我想要做什么。但是我得到一个错误,说最后一个 else 在没有 if 之前被调用。

我怀疑问题出在 if 和 else 之间的 if-else 语句。你们会怎么解决呢?

int talet;
scanf("%d", &talet);

int i = 1;
while (i <= 99) {
  int a; {
    if (i % talet == 0 || talet == (i / 10) % 10 || talet == i % 10) {
      if (talet % 10 == 0)
        printf("\n");
      else
        continue;
    }
    printf("burr ");
    else
      printf("%d ", i);
  }
  i = i + 1;
}

【问题讨论】:

  • 只需再观察一次您的支架放置。他们到处都是。
  • 发布代码时,一致的缩进对于可读性很重要。此外,选项卡在此站点上效果不佳,因此请务必使用空格。此外,通过一致的缩进,您的问题非常明显。
  • "我想很容易理解我要做什么。" 不,不是。我们应该从什么得出您希望输出的样子?
  • 感谢您的提示。正如我所说,这是我的第一个实际项目,所以我并没有真正关注结构本身,因为我被告知缩进并不像 Python 中每个空间都很重要那样真正重要。我会考虑的。还有支架放置,我刚刚明白了它们的意思。我以为你必须有 {if (condition) { //If 语句} else //else 语句}。现在我明白了!干杯
  • @diaco 缩进关系到 我们的 可读性,而不是编译器如何理解代码。在这种情况下,缩进隐藏编译器如何查看代码。此外,一个好的 IDE 或编辑器可能能够帮助您使用工具来自动缩进和/或突出显示匹配的 {}

标签: c if-statement


【解决方案1】:

你的问题在这里:

}
    printf("burr ");  //<---
else
    printf("%d ",i);

else 块之前不能有任何语句。所以删除它或将其移动到 else OR if 块中,如下所示:

} else {
    printf("burr ");
    printf("%d ",i);
}

【讨论】:

  • 问题是,我希望该语句成为前一个 if 语句的一部分。如果你明白我的意思,我只是不想在“if”的“if 和 else”中重复它
  • @diaco 那么就放在前面的if语句里了?!
  • 那是我的意图,我认为它现在确实在里面。请注意,我之前一直在学习 Python。也许这就是我误解它的原因。换句话说,{ } 中的所有内容都是 if 语句的一部分?
  • @diaco 是的,如果您有一个带有 if 语句的代码块 ({}),那么这里面的所有内容都是 if 语句的一部分。例如if (condition) { //If statement} else { //else statement} 如果没有括号,它只是下一个语句。例如if (condition) statement; else statement;
【解决方案2】:

问题在于你的括号。缩进对于理解在哪里打开和关闭括号很重要

int talet;
scanf("%d",&talet);

int i=1;
while(i<=99)
{
int a;

    if (i%talet==0 || talet==(i/10)%10 ||talet==i%10)
    {
             if (talet%10==0)
                  printf("\n");
             else
                  continue;

        printf("burr ");
    }
    else
    {
        printf("%d ",i);
    }
    i=i+1;
}

【讨论】:

  • 我猜这对你有用,很高兴我能帮助你。祝你好运!
【解决方案3】:

问题是您在if 括号之外有一个printf。因此,编译器认为if 语句已完成。当它到达else 时,由于没有打开if 条件而引发错误

你应该有这个

if (i%talet==0 || talet==(i/10)%10 ||talet==i%10)
{
    if (talet%10==0)
        printf("\n");
    else
        continue;

    printf("burr "); // <-- this was moved
}
else
    printf("%d ",i);

【讨论】:

    【解决方案4】:

    尽量让你的代码块保持干净和可读。 这样可以防止你犯错。

    你可以写一个 if else Horstmann 风格:

    if (condition)
    {
        #statements
    }
    else
    {
        #statements
    }
    

    或者更紧凑的 TBS1 风格:

    if (condition) {
        #statements
    } else {
        #statements
    }
    

    选择你喜欢的,crashmstr提供的评论里有更多的款式(感谢他),坚持下去。 它将提高您的代码质量。

    【讨论】:

    • 我不知道我会将第一个示例称为“oldschool”,也不会将第二个示例专门与 Java 相关联。 Indent Style
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 2020-02-10
    • 2015-06-04
    • 1970-01-01
    相关资源
    最近更新 更多