<問題>
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; }