2016-06-13 6 views
-2

ユーザー入力を受け取り、最小値と最大値の前の値を比較するCプログラムを作成したいとします。私が抱えている問題は、以前に入力した値をminおよびmaxとして使用するのではなく、値の比較が自身をリセットし続けることです。プログラムは、ここに.....プログラムを停止する関数を使用して最小値または最大値を決定する

をファイルループの終わりを使用するプログラムでの私の試みです:

#include <stdio.h> 
//variables for the functions: 
double MinMax(double a); 

//main program 

int main(){ 
    double num; 
    while (num!=EOF){ 
     printf("Enter a real number: "); 
     scanf("%lf",&num); 
     MinMax(num); 
    } 
    return 0; 
} 

//function 
double MinMax (double a){ 
    double max=0,min=0; 
    if (a>max){ 
     max=a; 
    } 
    else if (a<min){ 
     min=a; 
    } 
    else { 
    } 
    printf("The max is %lf and the min is %lf\n",max,min); 
} 
+0

関数を呼び出すたびに、最大値と最小値がゼロに設定され、関数内に変数を格納することはできません。それらの変数を持つクラスとMinMaxのような関数を作成する必要がありますが、そのクラスの中で呼び出すたびにminとmaxを0にリセットする必要はありません。次に、クラスは変数情報を格納することができ、minmaxを呼び出すたびに情報を更新します。または、参照で変数を渡すための答えに記載されているとおりです。 – Russ

+2

"Cプログラムを書いてみたいです" - C++ではなく、Cという質問にタグを付けるべきです。 –

+0

"C++プログラムを書いてみたいです" - なぜこのコードは完全にCですか? –

答えて

0
#include <stdio.h> 
//variables for the functions 
void MinMax(double a, double* max, double* min); 

//main program 
int main() { 
    double num = 0; 
    double min = 0; 
    double max = 0; 

    printf("Enter a real number: "); 
    scanf("%lf",&num); 

    //To exit the loop and avoid undefined behaviour 
    while (num != -999) {  
     MinMax(num, &max, &min); 
     printf("Enter a real number: "); 
     scanf("%lf",&num); 
    } 

    return 0; 
} 

void MinMax (double a, double* max, double* min) { 
    if (a > *max) 
      *max = a; 

    if (a < *min) 
      *min = a; 

    printf("The max is %lf and the min is %lf\n", *max, *min); 
} 

また、使用することを選択することがあります。

static double max = 0, min = 0; 

これはのMinMax機能の上に行くだろうが、あなたの問題について移動する最良の方法は、参照によって渡すためにポインタを使用することです。

void MinMax(double a, double* min, double* max) 

:Cプロトタイプない&に*使用している。上記の実証されたように

ハッピーコーディング。

+0

あなたは '* while(num!= EOF)' gaffeを繰り返しましたが、それは*未定義の動作*です。 –

+0

@WeatherVaneあなたはおそらくより良い方法を提案することができます、ありがとう。 – Twahanz

+0

私の上記のコメントと同じように、while(scanf( "%lf"、&num)!= 1) 'またはおそらく' == 1'です。 –

2

次の2つの方法で、あなたのコードを修正することができます

  • minmax変数static、または参照を介して
  • minmaxを行います。第二のアプローチは、より複雑ですが、それはまた良いです

    static double max=0, min=0; 
    

    minmaxmainに移動する必要がある、とMinMaxニーズの署名を取るために

最初のアプローチは、以下の変更が必要ですそれら参照することにより:あなたは、SC内minmaxを宣言するため

double MinMax(double a, double& min, double& max); 
+0

私の知識が不足して申し訳ありませんが、minとmaxを静的にすることはどういう意味ですか? 2つ目の方法では、関数が1つの結果にしか使用できないことがわかっているので、どのように動作しますか? –

+0

@EdwinAndrew静的変数は呼び出し間に値を保持します。参照渡しは関数が返すことなく変更することを可能にします。 – dasblinkenlight

0

それは、保存しないですあなたの関数のope MinMax。したがって、関数が返ってくると、それらの変数はスタックから削除されます。

double MinMax(double a, double &min, double &max) {...} 

だからあなたの更新された値は、関数呼び出しの間で保存されます:あなたは機能を使用したい場合は、私はこのような参照することにより最小値と最大値を渡してお勧めします。

関連する問題