下記の解答のdo while文の配列の部分(13行目)が「array」となっています。なぜ「array」ではなく「i - 1」となるのかがわかりません。確かにこれを入れないと、データの終わりを意味すると問題で指定されている「−1」を入力しても無限ループから抜けられません。
どなたか、この理由を教えてくださる方はいらっしゃいますか。
問題:
0〜100の範囲で入力された複数の数値の中から、最大値と最小値を求めて表示するプログラムを作成せよ。-1が入力された場合は、入力の終わりと判定する。ただっっし、最大値と最小値はmian関数以外の1つの関数の中で求める。また、入力された数値を記憶する配列の要素数は10とし、それ以上入力された場合はエラーが起きても仕方ないこととする。
解答:
#include <stdio.h>
void maxmin(int array[], int *max, int *min);
int main (void)
{
int i = 0, array[10], max, min;
do {
printf("%d th number: ", i + 1);
scanf ("%d", &array[i]);
i++;
} while (array[i - 1] != -1);
maxmin(array, &max, &min);
printf("Max is: %d\n Min is: %d\n", max, min);
return 0;
}
void maxmin(int array[], int *max, int *min)
{
int i = 0;
*max = 0;
*min = 100;
while (array[i] != -1) {
if (array[i] > *max) *max = array[i];
if (array[i] < *min) *min = array[i];
i++;
}
}