2016-09-11 4 views
-1

リンクされたリスト内の数字を受け取り、最も小さい番号と最大の番号を判別する関数を作成しました。私はそれぞれの番号を取ってそれを次のものと比較するはずのwhileループを作成しました。 'newNumber'は現在の番号で、 'next'はリストの次の番号でなければなりません。現在の番号と次の番号を呼び出す方法を理解できない。私のwhileループもまた無限です。なぜなら、私は決定で再び数値を参照しているからです。'NumberSize'関数のバイナリに無効なオペランドがあります

double NumberSize(NewNumber *start){ 

NewNumber *determine = start; 
double SecondNumber =0; 
double FirstNumber = 0; 
while(determine != NULL){ 
    FirstNumber = determine->newNum; 
    SecondNumber = determine->next; 

    if(FirstNumber < SecondNumber){ 
     printf("The biggest number is:\n", SecondNumber); 
    }else{ 
     printf("The smallest number is:\n", FirstNumber); 
    } 
} 
+0

「決定するかどうか」とはどういう意味ですか? 'decide'は' double'、 'decide'はポインタです。それらを比較することはどういう意味ですか? 'while(determine)'を実行してから 'decide'の値を決して変更しないので、ループは無限になります。したがって、ループ条件は決して偽になりません。最大値と最小値を計算したいと思われるが、関数の開始時に 'smallNumber'と' bigNumber'をゼロに設定してから、それらを決して再び変更しないでください。あなたはちょうど推測しているようです。このようにしてプログラミングに成功することはできません。 –

+0

@ericericノードを印刷する方法、平均を計算する方法、またはこの場合、最大/最小のエントリを探す方法は常に同じです。リストを通って何かを実行します。つまり、上記のすべての部分でその部分を再利用できます。 – deamentiaemundi

+0

@deamentiaemundi私はwhileループをもはや無限にする方法について考えています。私は2つの変数が必要です.1つは最大の数値を格納し、もう1つは最小の数値を格納することです。私はまた、作成する必要がありますし、if文はリストの最初のものと次のものを比較しますか? –

答えて

0

リストを忘れてしまった。平均のための解の使用:

void NumberSize(NewNumber * start) 
{ 
    double num = 0.0; 

    double biggest; 
    double smallest; 
    int flag = 0; 

    NewNumber *temp = start; 
    // set start values 
    if(tmp != NULL){ 
    biggest = temp->newNum; 
    smallest = temp->newNum; 
    tmp = tmp->next; 
    flag = 1; 
    } 

    // while temp is not NULL 
    while (temp) { 
    // get number from current node 
    num = temp->newNum; 
    // if that number is bigger than "biggest" 
    if (num > biggest) { 
     // exchange "biggest" with "num" 
     biggest = num; 
    } 
    // do it the same way for the smallest number 
    else if (num < smallest) { 
     smallest = num; 
    } 
    // here is the forgotten line: 
    // go to the next node 
    temp = temp->next; 
    } 
    if(flag){ 
    // no returns, just printing 
    printf("The smallest number is: \n", smallest); 
    printf("The biggest number is: \n", biggest); 
    } else { 
    puts("list empty"); 
    } 
} 
+0

すべての数値が0より大きい場合、このコードは最小値をゼロとして誤って表示します。同様に、もしそれらがすべて負であれば、それは誤って最大のものをゼロとして表示します。 'printf()'の呼び出しをもう一度見てください。 –

+0

@PaulGriffithsはい、それは正しいですが、printf()の呼び出しで何が問題なのですか?ああ...呼び出し元の変数を使用したい(void NumberSize(NewNumber * start、double * largest、double * smallest))それを元に戻すことを忘れて、編集します。または完全に削除します。他人を助けることに苦しみたくない。 – deamentiaemundi

関連する問題