【问题标题】:Unknown syntax error when trying to nest if statement inside of a do while loop尝试在 do while 循环内嵌套 if 语句时出现未知语法错误
【发布时间】:2016-11-14 01:31:40
【问题描述】:

我正在编写一个程序,它读取用户输入的数字,检查它是否在 0 到 100 之间,如果是,则该数字是平方根。如果数字小于 0,则会打印一条错误消息。如果数字在 100 和 200 之间,则找到该数字的自然对数,如果大于 200,则循环终止。

#include <stdio.h>
#include <math.h>

int main (void)

{
     float num;
     double x, y;

    do {
        printf("Please enter a number \n");
        scanf("%f", &num);

        if (num > 0 && num <= 100)
        {
            x = sqrt(num);
            printf("The square root of the number entered is %f \n", x);
        }
        else if (num <= 0)
        {
            printf("Please enter a positive number \n");
        }
        else (num > 100)
        {
             y = log(num);
             printf("The natural log of the number entered is %f \n", y);
        } 
    } while (num <= 200);

    return 0;
}

我遇到的问题是,当我构建解决方案时,我收到一条错误声明,说 a ;预计在

之后
else (num > 100)

这是什么原因,因为我不希望这里需要一个?

【问题讨论】:

  • 你为什么要把floatdouble混在一起?在 2016 年,请使用 double,除非有令人信服的理由不这样做。

标签: c visual-studio if-statement


【解决方案1】:
else (num > 100)

应该是

else if (num > 100)

else 子句没有任何条件 - 它只是一个语法错误。

您还应该检查scanf() 调用是否成功:

if (scanf("%f", &num) != 1) {
   printf("Input error");
   exit(1);
}

【讨论】:

    【解决方案2】:

    else 不采用 表达式,它与语法允许的在词法上最接近的 if 之前的 if 相关联。

    格式是

    if(表达式)语句else语句

    引用C11,第 6.8.4.1 章

    [...] 如果 expression 比较不等于 0,则执行第一个子语句。 在else 形式中,如果表达式比较等于 0,则执行第二个子语句。如果通过标签到达第一个子语句,则不执行第二个子语句 执行。

    因此,要检查 另一个 条件,您需要有另一个 if 子句。

    在启用警告的情况下编译您的代码,您会看到编译器在尖叫

    警告:声明无效 [-Wunused-value]
    else (num &gt; 100)
    ^

    【讨论】:

      猜你喜欢
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      相关资源
      最近更新 更多