2016-11-13 36 views
1

我正在編寫一個程序,讀入用戶輸入的數字,檢查它是否在0到100之間,如果它是數字是平方根。如果該數字小於0,則會打印一條錯誤消息。如果數字在100到200之間,則找到該號碼的自然對數,如果超過200,則循環終止。當嘗試嵌套if語句執行while循環時發生未知語法錯誤

#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) 

,這是什麼原因,因爲我不希望那裏是一個需要在這裏後,預計?

+1

你爲什麼要用'double'混合'float'?除非有令人信服的理由,否則在2016年,請使用'double'。 –

回答

2
else (num > 100) 

應該

else if (num > 100) 

else條款沒有任何條件 - 它只是一個語法錯誤。

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

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

else不採取表達,它與詞彙最近的前if由語法允許相關。

格式是

if(表達)語句else語句

引用C11,章§6.8.4.1

[...]執行第一子語句如果表達式 comp ares不等於0. 在else表格中,如果表達式比較等於0,則執行第二個子語句。如果第一個子語句通過標籤到達,則第二個子語句不是 執行。

所以,檢查另一個條件,你需要有另一個if條款。

編譯代碼啓用的警告,你會在這裏看到一個編譯器尖叫像

警告:語句沒有影響[-Wunused值]
else (num > 100)
^