質問: maxIntArray(data, size); printf("最大値は %d です.\n", maxv); return 0; } ```
回答: 他の質問も見ました。そこでも似たようなことを指摘されていましたが、 1. 各処理がどのような順番で実行されていくか、 2. ある処理でどの変数が使用されるか、 3. ある処理の後、変数がどのような状態になっているか を意識すると良いと思います。 C言語などの手続き型言語の場合、処理の順番が重要になります。 C言語の場合、main関数がプログラム本体になります。提示コードの場合、 ### Step 1 ``` int main() { FILE *fp; int i, data[N]; char fname[] = "data.txt"; // この時点 ``` この時点では fp, i, data[0] ~ data[N-1] にはめちゃくちゃな数値が入っており、 fname には data.txt が入っています。 ### Step 2 ``` if ((fp=fopen(fname,"r"))==NULL){ ``` は内側から実行されていきます。 1. まず `fopen(fname, "r")` でファイルを開きます。`fname` には "data.txt" が入っているので data.txt を開いて、そのファイルを示す何らかの値(=ファイルポインタ)を取得します。 2. そして `fp=fopen( ... )` でその値を `fp` にセットします。 3. `(fp= ... )==NULL` でその値が `NULL` であるか(失敗しているか)を確認します。 4. `if ( ... )` で、もしもファイルオープンが失敗しているならば `{ }` の中に入り、失敗していなければ `{ }` の直後まで飛びます。 ファイルオープンが失敗しなかった場合を考えます。 ### Step 3 ``` if ((fp=fopen(fname,"r"))==NULL){ // ここはスキップされた } // ここ } ``` ここでは `fp` にはファイルポインタ, `fname` には "data.txt" が入っており、 `i`, `data[0]` ~ `data[9]` にはめちゃくちゃな数値が入っています。 ### Step 4 ``` if ((fp=fopen(fname,"r"))==NULL){ // スキップ } i = 0; // ここ } ``` ここでは `fp` にはファイルポインタ、 `i` には 0、 `fname` には "data.txt" が入っており、`data[0]` ~ `data[9]` にはめちゃくちゃな数値が入っています。 ### Step 5 ``` while(i