2016-11-13 10 views
1

ユーザーが入力した数値を読み込み、数値が0から100の間であるかどうかを調べるプログラムを作成しています平方根です。数値が0より小さい場合、エラーメッセージが出力されます。数字が100から200の間であれば、数値の自然対数が見つけられ、200以上であればループが終了します。Do whileループの中にifステートメントをネストしようとすると、構文エラーが発生する

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

ここに必要なものはないと思われる理由は何ですか?

+1

なぜあなたは 'float'と' double'を混ぜていますか? 2016年には、説得力のない理由がない限り、「二重」を使用してください。 –

答えて

2
else (num > 100) 

else if (num > 100) 

else句であるべき任意の条件にしない - それだけで構文エラーです。

scanf()呼び出しが成功したかどうかも確認する必要があります

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

else表現を取らない、それは辞書的に最も近いが、構文によって許可されているifの前に関連付けられています。

フォーマットC11を引用

if(発現)ステートメントelseステートメント

ある、章§6.8.4.1

[...]最初のサブステートメントが実行されますの式の場合 elseフォームでは、式が0に等しい場合は2番目のサブステートメントが実行されます。ラベルを介して最初のサブステートメントに達した場合、2番目のサブステートメントは実行されません。 が実行されます。

ので、のために別の状態を確認するために、あなたは別のif句を持っている必要があります。

有効に警告を使用してコードをコンパイルし、コンパイラが

警告のように叫んで見て取得します:効果なしとの声明[-Wunused-値]
else (num > 100)
^

関連する問題