2016-09-21 21 views
-1

これはC言語を初めて学習したので、入力した数字の中で2番目に大きい数字を見つけるコードを書く必要があります。どのようにこのCプログラミングの課題を解決するには?

コードは次のとおりです。

#include <stdio.h> 
int main() { 
    int x, max, max2; 
    max = max2 = -1; 

    while (scanf("%d", &x) != EOF) { 
     if (x > max) { 
      max2 = max; 
      max = x; 
     } else if (x > max2) { 
      max2 = x; 
     } 
    } 

    printf("%d\n", max2); 
    return 0; 
} 

問題は、私はここに1 2 3 4 5を入力すると4が第二の最大数であるとして、答えは、4であるべきです。しかし、コードは入力された番号で動作するはずです。私はそれを理解できませんでした。

私はそれを解決するためにLinux端末とvimを使用する必要があります。私はvim inputを使用して端末に入力ファイルを作成し、そこにファイルを入力して1 2 3 4 5を入力しました。しかし、./a.out <inputを使用してコードを実行すると、それでも5が表示されます。これをどのように解決すればよいですか?

+0

ようこそスタックオーバーフロー!これまでのところあなたの研究/デバッグの努力を示してください。まず[Ask]ページをお読みください。 –

+2

Whoa whoa whoa。 David * Lightman *?最初はシンプルなCのものですが、WOPRにハッキングし、第3次世界大戦を開始しています(http://www.imdb.com/title/tt0086567/)。私はこれをここの芽の中に入れておくべきだと思う。 – Phylogenesis

+0

は、より大きな何かを見つけたので新しい値を受け取ったときに現在の 'max'値を割り当てられる変数' secondButMax'を導入します。そして、それらの核兵器だけを残す。 – tofro

答えて

0

私は自分で簡単にして、入力を配列に置き換えました。

int main (void) 
{ 
char lst [] = { 10, 11, 2, 33 }; // my input (must be char because 
    // I use sizeof to determine the number of inputs) 

int max = -1; // biggest 
int submax = -1; // 2nd biggest 

if (sizeof (lst) < 2) // must be > 1 to find 2 biggest numbers 
{ 
    printf ("bad"); 
    return 0; 
} 

for (int i = 0; i < sizeof (lst); i ++) 
{ 
    int x = lst [i]; 
    if (x > max) 
    { 
     submax = max; 
     max = x; // new biggest makes the old biggest to 2nd biggest 
    } 
    else // its not biggest but maybe 2nd biggest 
    { 
     if (x > submax) 
     { 
      submax = x; 
     } 
    } 

    printf ("\n%d: check %d - max=%d, submax=%d\n", i, x, max, submax); 
} 

return 0; 
} 
+0

しかし、私はarreyを使うことはできません。私はarreyを使わずにそれを作らなければなりません。 –

+0

この問題を解決しました。助けてくれた皆様に感謝します。 –

+0

プログラミングは、コンピュータに文字をハッキングすることに関するものではありません。それはアイデアやアルゴリズムに関するものです。理解してみてください...そして、私の配列をあなたの入力と置き換えるのはとても簡単です。 – chris01

0

「任意の入力番号」とはどういう意味ですか?ソートされていない入力?ネガティブ? 正の整数のリストをとり、2番目の最大値を返す関数です。エラーが発生した場合(引数が不十分な場合)-1を返します。あなたのニーズに適応する。

int snd_max(int length, int* args) { 
    int max, max2; 
    max = -1; 
    max2 = -1; 
    for (int i = 0; i< length; i++) { 
     if (args[i] > max) { 
      max2 = max; 
      max = args[i]; 
     } else if (args[i] > max2 { 
      max2 = args[i] 
     } 
    } 
    return max2; 
+0

ありがとうございました。私はソートされていない入力を意味しました。 –

関連する問題