C言語の配列は、実行後に配列サイズを変更できません。
よって、そのアプリケーションで使うデータ数が決まっていない場合、
使うであろう十分な要素数の配列にして、
先頭要素から順番に詰めて記憶する取り扱いをしました。
この時、『配列に何個まで記憶されているかを記憶する変数』と
一緒に使ってきましたが、
このような変数を使わなくても、管理できる場合があります。
それは、配列の各要素を順番に処理するだけのようなデータの場合です。
このような場合は、配列においてデータの並びが終わった区切りが分かればいいので、
データとして使わないような値を、終端値と決めて、要素に埋め込んで使います。
C言語において、このような管理をする代表的なデータが文字列です。
C言語では文字列を記憶する型がなく、文字コードが並ぶ先頭の文字を指すポインタで管理します。
そして、その並びの終端値を'\0' のコードと決めて使っています。
例えば試験点数のデータが数件あるとして、それを配列で管理させる例で示します。
この場合、負の点数がないので例えば-99を
情報の区切りまたは終端と決めて使います。
以下は、数字以外や負のキー入力データまで、配列へのデータ追加を繰り返す関数 input_u を実行した後、
入力したデータを列挙しているプログラムです。
#include <stdio.h>
#define MAXNUMB 100
void input_u( int * a )
{
int i;
for(i = 0; ; i++){
printf("点数入力>");
if( fscanf( stdin , "%d", a + i ) != 1) break;
if( a[i] < 0 ) break;
}
a[i] = -99;
fflush(stdin);
}
main()
{
int array[MAXNUMB];
int i;
input_u( array );
for(i = 0; array[i] != -99; i++){
printf("%d\n", array[i] );
}
}
array[0] | array[1] | array[2] | array[3] | array[4] | array[5] | array[6] | array[7] | array[8] | array[9] | array[10] | array[11] | array[12] | array[13] | array[14] | array[15] |
? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
(step1)
array配列の情報一つを引数にしてinput_u関数を呼び出します。