2016-10-29 5 views
1

私はこのCプログラムをほぼ完了しました。オプション1は、ユーザに小数の入力を求め、オプション2はその小数を表示します。オプション3は分数を昇順にソートし、オプション4は分数の最小、中央値、最大値を求めます。しかしながら。ユーザーが分数をソートする前にオプション4を選択すると、「最初に値を並べ替えてください」というポップアップが表示されます。私はifステートメントを追加することを知っていますが、ステートメントの内容は不明です。If-statementはソートされていなければデータを出力しません

これは私のコードです:

#include <stdio.h> 
#include <stdlib.h> 

//Struct to hold fraction data 
typedef struct fraction { 
    int numerator, denom; 
} fraction; 

double Calc_Frac(fraction b) { 
    return ((double)b.numerator/b.denom); 
} 

int main() { 
    fraction arrFraction[100]; 

    int i = 0; 
    int j; 
    int num = 1; 

    while (num == 1) { 
     int choice; 
     printf("\nPress 1 to enter a fraction\n"); 
     printf("Press 2 to view stored fractions\n"); 
     printf("Press 3 to sort fractions\n"); 
     printf("Press 4 to find min max median fraction\n"); 

     scanf("%d", &choice); 

     if (choice == 1) { 
      //Prompting user 
      printf("\nEnter your fraction, numerator followed by denominator\n"); 

      //Reading values from user 
      scanf("%d %d", &arrFraction[i].numerator, &arrFraction[i].denom); 
      //Incrementing counter 
      i++; 
     } 

     if (choice == 2) { 
      printf("-------------------------\n"); 
      for (j = 0; j < i; j++) { 
       printf("%d %d/%d \n", 
         arrFraction[j].numerator/arrFraction[j].denom, 
         arrFraction[j].numerator % arrFraction[j].denom, 
         arrFraction[j].denom); 
      } 
      printf("\n-------------------------\n\n"); 
     } 

     if (choice == 3) { 
      int min; 
      fraction tmp; 

      for (int k = 0; k < i; k++) { 
       min = k; 
       for (j = k + 1; j < i; j++) { 
        if (Calc_Frac(arrFraction[j]) < Calc_Frac(arrFraction[min])) { 
         min = j; 
        } 
       } 
       tmp = arrFraction[k]; 
       arrFraction[k] = arrFraction[min]; 
       arrFraction[min] = tmp; 
      } 
     } 

     if (choice == 4) { 
      if (//the statement) { 
       printf("please sort values first"\n); 
      } else { 
       printf("Min fraction is: %d %d/%d\n", 
         arrFraction[0].numerator/arrFraction[0].denom, 
         arrFraction[0].numerator % arrFraction[0].denom, 
         arrFraction[0].denom); 
       printf("Median fraction is: %d/%d\n", 
         arrFraction[i/2].numerator, 
         arrFraction[i/2].denom); 
       printf("Max fraction is: %d %d/%d\n", 
         arrFraction[i - 1].numerator/arrFraction[i - 1].denom, 
         arrFraction[i - 1].numerator % arrFraction[i - 1].denom, 
         arrFraction[i - 1].denom); 
      } 
     } 
    } 
    system("pause"); 
    return (0); 
} 
+0

確かに私もそれを適用する条件を確認します。 – airdemko3

+2

フラグ(デフォルトは 'false')を作成して、オプション3を選択した後にそれを' true'に設定することができます。 – qwerty1423

+0

それと同時に行います。 1が選択されると必ずそれをクリアします。 – WhozCraig

答えて

1

あなたはフラグを追加:

int was_sorted = 0; 

その後、あなたは(選択肢3の内側に)それをソートした後、あなたがそれを設定します。

was_sorted = 1; 

フラグが消去されたため、配列を変更することはできません。

was_sorted = 0; 

次に、あなたの条件は次のとおりです。

if(!was_sorted) { 
    printf("not sorted blah blah\n"); 
} else ... 

別の方法としては、配列がソートされているかどうかをチェックする関数を記述し、その関数を呼び出すことができます。これにより、配列が既に昇順で入力されている場合、配列のソートが保存されなくなります。

+0

「データを入力してください(まだデータを入力していない場合)」と入力してからソートデータを印刷したい場合(ソートしていない場合)はどうすればいいですか? – airdemko3

+0

@ airdemko3: 'i'の値をチェックしますか? – ybungalobill

+0

それはどういう意味ですか? – airdemko3

関連する問題