課題 1.1の変形2   Windows: ctrl z, UNIX: ctrl dが入力されるまでの最大値

<問題>

Windows:ctrl d、(UNIXでは ctrl d)が入力されるまで、入力された整数のうち、一番大きい整数を出力しなさい。

<実行結果>
2
27
5
3回のデータ入力がありました。最大値は27です

<コメント>





解答例

#define _CRT_SECURE_NO_WARNINGS /* Visual Studio でscanfに関する警告オフ設定 */

#include <stdio.h>
#include <limits.h>

int main(void) {
    int i, m, n;  /* iは毎回入力される整数、mは暫定最大値、nは入力数 */

    /* 初期化 */
    n = 0;
    m = INT_MIN;  /* システムに応じたintの最小表現値 */

    /* Windowsでは、ctrl z, UNIXでは ctrl dが、EOF */
    /* Visual Studioでは、scanfをscanf_sにすると警告が出なくなる */
    while (scanf("%d", &i) != EOF){
        if (i > m)
            m = i;
        n++;
    }

    /* nが0でないこと、つまり入力があったことをチェックした方がうまいね */
    printf("%d回のデータ入力がありました。最大値は%dです\n",n, m);

    return 0;
}

/*
 * Sajaniemi (2005) の変数の役割をあてはめてみます
 */

#define _CRT_SECURE_NO_WARNINGS /* Visual Studio でscanfに関する警告オフ設定 */

#include <stdio.h>
#include <limits.h>

int main(void) {
    int i, m, n;  /* iは毎回入力される整数、mは暫定最大値、nは入力数 */

    /* 初期化 */
    n = 0;
    m = INT_MIN;  /* システムに応じたintの最小表現値 */

    while (scanf("%d", &i) != EOF){ /* iは、「直近値の変数」 most recent holder */
        if (i > m)  /* mは、「暫定候補の変数」 most wanted holder */
            m = i;
        n++;        /* nは規則的に変化(増加) 「ステッパー変数」 stepper */
    }

    printf("%d回のデータ入力がありました。最大値は%dです\n",n, m);

    return 0;
}