こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

配列がずれてしまう

C言語初心者です。
二次配列を組んだのですが、初期では正常に配列に入ったのですが、
次回のループで入っていた筈の数値がズレてしまいます。

#include <stdio.h>
#include <stdlib.h>

int main(void) {
FILE *fp; // FILE型構造体
char fname[] = "c:\\tmp\\test.txt";
int f1, f2, f3, f4, f5;
int i,p,s;
int r_table[1100][4];

//ファイル読み込み用構造体
for(i=0;i<1100;i++){
for(p=0;p<4;p++){
r_table[i][p]=0;
}
}

fp = fopen(fname, "r"); // ファイルを開く。失敗するとNULLを返す。
if(fp == NULL) {
printf("%s file not open!\n", fname);
return -1;
}

i=0;
while(fscanf(fp, "%d %d %d %d %d", &f1, &f2, &f3, &f4, &f5) != EOF) {//数字の格納
r_table[i][0]=f1;
r_table[i][1]=f2;
r_table[i][2]=f3;
r_table[i][3]=f4;
r_table[i][4]=f5;
printf("%d %d %d %d %d\n", r_table[i][0],r_table[i][1],r_table[i][2],r_table[i][3],r_table[i][4]);
i++;
}
fclose(fp); // ファイルを閉じる

printf("\n");

for(s=0;s<10;s++){//数字の抜出 10回ループ

printf("%d %d %d %d %d\n", r_table[s][0],r_table[s][1],r_table[s][2],r_table[s][3],r_table[s][4]);
}


return 0;
}

実行結果
9 13 14 19 22
1 14 25 29 31
4 12 15 22 25
3 13 18 19 22
2 8 14 17 26
1 3 4 9 16
2 18 19 28 30
9 10 16 17 28

9 13 14 19 1
1 14 25 29 4
4 12 15 22 3
3 13 18 19 2
2 8 14 17 1
1 3 4 9 2
2 18 19 28 9
9 10 16 17 28
どうやら、r_table[s][4]にr_table[s+1][0]が入ってしまっているように見られます。
どの部分が間違っているのかご教示頂けたらと思います。

投稿日時 - 2020-09-06 21:11:19

QNo.9795573

困ってます

質問者が選んだベストアンサー

int r_table[1100][4];
そもそも、これ
r_table[i][0]=f1;
r_table[i][1]=f2;
r_table[i][2]=f3;
r_table[i][3]=f4;
r_table[i][4]=f5;
ここで、「5個」入れてますが、2つ目は「4個」しか取られてませんよ。
これをオリジンと言いますが
[4]と書いた場合、
0,1,2,3 の4個であり、4番は「ありません」
なので、存在しない場所を参照しているために
おかしいという具合です。

投稿日時 - 2020-09-06 21:41:21

お礼

あ!成程です!!!
うっかりしてました! こんなところで引っかかってしますとは。
意識はしていたつもりだったのに、こういう所でポカしてしまっていたとは(涙)
ありがとうございます!助かりました!

投稿日時 - 2020-09-06 22:09:36

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

r_tableのサイズは1100の4となっているので,r_table[i][0]からr_table[i][3]までしか確保されていないのに,r_table[i][4]に代入しようとしている。

投稿日時 - 2020-09-06 21:48:24