配列の暴走

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
大熊
記事: 45
登録日時: 2年前

配列の暴走

#1

投稿記事 by 大熊 » 2年前

(1)と(2)には何が入りますか
・無限ループによってキーボードからの整数入力をくりかえしたいです
・キーボードから負の数が入力されたとき,無限ループを終了したいです.
・無限ループが終了したら,それまでにキーボードから入力された0以上の数の中で最も大きな2つの数を画面に表示したいです
・ただし,無限ループ終了までにキーボードから入力された0以上の数が1個のみの場合は2位を0とする.
・同じくキーボードから入力された0以上の数が0個の場合は,1位も2位も0とする.

動作例1:
整数を入力>5
整数を入力>2
整数を入力>0
整数を入力>6
整数を入力>-1
1位:6
2位:5


動作例2:
整数を入力>0
整数を入力>7
整数を入力>5
整数を入力>2
整数を入力>7
整数を入力>-10
1位:7
2位:7


動作例2:
整数を入力>3
整数を入力>-1
1位:3
2位:0


動作例2:
整数を入力>-1
1位:0
2位:0


ソースコード:

コード:

#include <stdio.h>
int main(void)
{
    int i, x, tmp, max[2] =  (1) ;
    while(1) {
        printf("整数を入力>");
        scanf("%d", &x);
        if(x <  0 )
             break;
        else if(x >  max[0] ) {
             (2) 
             max[0]=x;
        }
        else if(x >  max[1] )
             max[1]=x; 
    }
    for(i=0; i<2; i++) {
        printf("%d位:%d\n", i+1, max[i]);
    }
    return 0;
}

box
記事: 2002
登録日時: 13年前

Re: 配列の暴走

#2

投稿記事 by box » 2年前

別に暴走でも何でもないと思うが…。

コード:

#include <stdio.h>

int main(void)
{
    int i, x, max[2] = { 0, 0 };

    while (1) {
        printf("整数を入力>");
        scanf("%d", &x);
        if (x < 0)
            break;
        else if (x > max[0]) {
            max[1] = max[0];
            max[0] = x;
        }
        else if (x > max[1])
            max[1] = x;
    }
    for(i = 0; i < 2; i++) {
        printf("%d位:%d\n", i + 1, max[i]);
    }
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

返信

“C言語何でも質問掲示板” へ戻る