2016-09-11 5 views
-2

以下、私はwhileループに入る関数を作成しました。 whileループでは、if文が呼び出されてリストを走査し、数値を調べて、どれが最大かどちらが最小かを調べます。プログラムを実行すると、printf()が1つだけ呼び出され、同じprintf()が複数回出力されます。 2つの数字を選んで、同じprintf()関数の下にそれらを印刷するようです。私はfirstNumber = firstNumber->next;がそのリストを横断するはずです。 secondNumber = secondNumber->next->next;はリストの次の番号を指すはずですか?私は自分のプログラム内のポインタと混同していると信じています

typedef struct A_NewNumber { 
    struct A_NewNumber *next; 
    double newNum; 
} NewNumber; 

void NumberSize(NewNumber *start) { 

    NewNumber *firstNumber = start; 
    NewNumber *secondNumber = start; 

    if(start != NULL) { 
     while (secondNumber != NULL && secondNumber->next != NULL) { 
      secondNumber = secondNumber->next->next; 
      firstNumber = firstNumber->next; 
      if(secondNumber > firstNumber) { 
       printf("The biggest number is:%lf \n",secondNumber->newNum); 
      } else { 
       printf("The smallest number is:%lf \n",firstNumber->newNum); 
      } 
      firstNumber = firstNumber->next; 
     } 
    } 
} 

完全なプログラムの例の実行:if()内部

Please enter a number or 
'quit' to stop or 'print' to print/calculate 
12 
Please enter a number or 
'quit' to stop or 'print' to print/calculate 
13 
Please enter a number or 
'quit' to stop or 'print' to print/calculate 
14 
Please enter a number or 
'quit' to stop or 'print' to print/calculate 
15 
Please enter a number or 
'quit' to stop or 'print' to print/calculate 
16 
Please enter a number or 
'quit' to stop or 'print' to print/calculate 
17 
Please enter a number or 
'quit' to stop or 'print' to print/calculate 
print 
Numbers:12.000000 
Numbers:13.000000 
Numbers:14.000000 
Numbers:15.000000 
Numbers:16.000000 
Numbers:17.000000 

The biggest number is:14.000000 
The biggest number is:16.000000 
The smallest number is:17.000000 
+0

...私はそれはあなたが達成したいものだ場合はよく分からない注意を

void NumberSize(NewNumber *start){ if(start==NULL){ printf('empty list'); return; } double high = start->newNum; double small= start->newNum; NewNumber *iterator = start->next; while(iterator!=NULL){ if(iterator->newNum > high){ high = iterator->newNum; } if(iterator->newNum < small){ small = iterator->newNum; } iterator = iterator->next; } printf("The biggest number is:%lf \n",high); printf("The smallest number is:%lf \n",small); } 

:私はこのような何かをやっているだろうデータが作成され、MCVEが出力する内容をデモンストレーションし、出力する内容を説明します。 –

+2

これは一般的な話題(これまでのところ)に関する7番目の質問です。それ自体は自動的に悪くはありませんが、いくつかの注意が適切です。あなたの課題はリンクされた数字のリストを使用する必要がありますか?そうでなければ、おそらく配列を使う方が賢明でしょう。このコードは、リスト内の要素(1,2)、(2,3)、(3,4)、...または要素(1,2)、(3,4)、...何かのペアワイズ比較を行うことを意図していますか? else。あなたはこれを明確に指定していません。 –

+0

@JonathanLeffler私はこのサイトの使用に関する私の知識の欠如と私の知識の欠如が問題になっている場合、私はお詫び申し上げます。あなたの最初の割り当てのためにこれのようなことをするように求められ、あまりプログラミングではなく、クラスで教えられます。割り当てを行うプロセスが少し不快になります。私が質問を続けているうちに、毎回Cについて多くのことを学んでいます。無数のYouTubeの動画を見ている以上のことです。プログラミングはいつも私のために難しかったし、このサイトを使って私が理解しやすくなった。私は助けから自分で適切な機能を書くことができました。 –

答えて

0

あなたは結果があるかを示すことができますか?

私は問題がfirstNumbersecondNumberの割り当てであると信じています。彼らは同じ目的を指しているようです。その結果、一方を変更すると他方を変更します。さらに、私はリストの頭を追跡することが安全だと思います。理想的にあなたがMCVE([MCVE])を提供しなければならないことをどのようにリストを示している

+0

コードを更新しました@PhoenixBlue –

2

比較が値ではなく、ポインタにする必要があります。

if(num1 > num2) { 
    // Do something. 
} else { 
    // Do something else. 
} 

あなたはwhile()ループ内で二回このfirstNumber = firstNumber->next;文を実行しているからです。

firstNumber = firstNumber->next; 
firstNumber = firstNumber->next; 

これはsecondNumber == firstNumber;

関連する問題