簡體   English   中英

嘗試在do while循環內嵌套if語句時發生未知語法錯誤

[英]Unknown syntax error when trying to nest if statement inside of a do while loop

我正在編寫一個程序,該程序讀取用戶輸入的數字,檢查它是否在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;
}

我遇到的問題是,在構建解決方案時,我收到一條錯誤聲明,指出 預計之后

else (num > 100)

原因是什么,我不希望在此需要一個?

else (num > 100)

應該

else if (num > 100)

else子句沒有任何條件-只是語法錯誤。

您還應該檢查scanf()調用是否成功:

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

else不接受表達式if語法允許,它與詞法上最接近的前導相關。

格式是

if (表達式)語句else語句

引用C11 ,第6.8.4.1章

[...]如果表達式比較不等於0,則執行第一個子語句 。以else形式,如果表達式比較等於0,則執行第二個子語句。如果通過標簽到達第一個子語句,則第二個子語句為未執行。

因此,要檢查其他條件,您需要具有另一個if子句。

在啟用警告的情況下編譯代碼,您將看到編譯器像

警告:聲明無效[-Wunused-value]
else (num > 100)
^

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM