重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

C言語でプログラムを書いているのですがどうしても解決しない問題があるので質問させてください。

(x座標 y座標 その座標における物理量)の順でスペースで区切られてまとまっているファイル(xyc_l.txt)があります。
1 1 8
2 1 2
3 1 2
・ ・ ・
・ ・ ・
51 1 2
1 2 6
2 2 2
3 2 4
・ ・ ・
・ ・ ・
51 2 5
1 3 6
・ ・ ・
・ ・ ・
・ ・ ・
49 51 9
50 51 3
51 51 8
-----ファイル(xyc_l.txt)の説明-----
上記の説明だとみにくいので
x座標=1 y座標=1 その座標における物理量=8
x座標=2 y座標=1 その座標における物理量=2
x座標=3 y座標=1 その座標における物理量=2
・・・
x座標=51 y座標=1 その座標における物理量=2
x座標=1 y座標=2 その座標における物理量=8
x座標=2 y座標=2 その座標における物理量=2
x座標=3 y座標=2 その座標における物理量=2
・・・
x座標=51 y座標=2 その座標における物理量=5
となっています。
x座標の範囲が[1:51]、y座標の範囲が[1:51]、その座標に対応する物理量(範囲はなし)が記されています。
------目標--------
このファイル(xyc_l.txt)の3列目に当たる座標に対応した物理量をファイルから読み込んで対応する座標に代入したいです。
例えば、座標(x=3,y=1)に対応している物理量2をcoordinate[3][1]=2というように、coordinate[][]とする変数に代入する作業をfor文を用いて51×51分行いたいということです。

自分で作ってみたプログラムを以下に示しておきます。
調べながら作ってみましたがIllegal instruction: 4がエラーとして返されるなどの問題も解決できず
うまく対処できずに困っています。
どなたプログラムに慣れている方、ご教授お願いします。


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(void) {
FILE *fp; // FILE型構造体
char fname[] = "xyc_l.txt";
float f1,f2,f3;
int i,j,coordinate[51][51];
double r,A,Count[j][i];
fp = fopen(fname, "r"); // ファイルを開く。失敗するとNULLを返す。
if(fp == NULL) {
printf("%s file not open!\n", fname);
return -1;
}
for (i=1;i<52;i++){
for(j=1;j<52;j++){
while(fscanf(fp, "%f %f %lf", &f1, &f2, &Count[j][i]) != EOF) {
printf("%.1f %.1f %f \n", f1, f2, Count[j][i]);

}
}
}

return 0;
}

A 回答 (1件)

テキストファイルのX,Y座標値がそのまま配列の要素番号に使用できますので、for文は不要だと思います。


配列の要素番号は0から始まるので、代入や読み出し時の要素番号指定は-1しています。
3列目の値を読む変数をintにしていますが、必要であれば対応箇所の型をdouble等に修正してください。

----------
#include<stdio.h>

#define MAX 51

int main(void) {
FILE *fp;
const char fname[] = "xyc_l.txt";
int x,y, data, coordinate[MAX][MAX];

if( (fp = fopen(fname, "r")) == NULL ) {
printf("%s file not open!\n", fname);
return -1;
}

while(fscanf(fp, "%d %d %d", &x, &y, &data) != EOF) {
coordinate[x-1][y-1] = data;
printf("%d %d %d \n", x, y, coordinate[x-1][y-1]);
}

return 0;
}
    • good
    • 0
この回答へのお礼

ありがとうございます。

ところで
gccでコンパイルして
./a.outで実行するとSegmentation fault: 11
のエラーが出るのですが理由が調べてもわかりません。

この原因がお分かりでしょうか??

お礼日時:2017/09/02 19:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!