先ほども同じような質問をしたのですが、C言語でプログラムを書いているのですがどうしても解決しない問題があるので質問させてください。
(x座標 y座標 その座標における物理量)の順でスペースで区切られてまとまっているファイル(xyc_l.txt)があります。
1. 1. -0.006183877
2. 1. -0.00614342
3. 1. -0.0062423
・ ・ ・
・ ・ ・
51. 1. -0.0232342
1. 2. -0.00234223
2. 2. -0.00644444
3. 2. -0.0061876
・ ・ ・
・ ・ ・
51. 2. -0.0061
1. 3. -0.54545454
・ ・ ・
・ ・ ・
・ ・ ・
49. 51. -0.0061111
50. 51. -0.00686545
51. 51. -0.00618452
-----ファイル(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>
#define MAX 51
int main(void) {
FILE *fp;
const char fname[] = "xyc_l.txt";
double x,y;
double data,coordinate[MAX][MAX];
if( (fp = fopen(fname, "r")) == NULL ) {
printf("%s file not open!\n", fname);
return -1;
}
while(fscanf(fp, "%lf %lf %lf", &x, &y, &data) != EOF) {
coordinate[x-1][y-1]=data;
printf("%f %f %f \n", x,y,coordinate[x-1][y-1]);
}
return 0;
}
-----生成されるエラー-----
error: array subscript is not an integer
coordinate[x-1][y-1]=data;
^~~~
error: array subscript is not an integer
printf("%f %f %f \n", x,y,coordinate[x-1][y-1]);
^~~~
2 errors generated.
もう手に負えません。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
配列の添え字は整数のみ可能です。
座標系は実数表記でも整数として扱かってよいならば、以下で如何でしょうか。
#include <math.h>
...
int a, b;
...
while(fscanf(fp, "%lf %lf %lf", &x, &y, &data) != EOF) {
a = (int) round(x) - 1;
b = (int) round(y) - 1;
coordinate[a][b] = data;
もし座標系も実数で扱う必要があるならば、
単純な二次元配列では対応できないので、
実装量がとても多くなってしまいます。
No.2
- 回答日時:
double x,y; → int x,y;
に変更して、
併せて
while(fscanf(fp, "%lf %lf %lf", &x, &y, &data) != EOF) {
→
while(fscanf(fp, "%d. %d. %lf", &x, &y, &data) != EOF) {
のように整数読み込みに変更すればよいと思います
(適当に書いたの書式でエラーが出ると思うので正しい書式に治してください)
No.1
- 回答日時:
パッと見ただけですが。
。。二元配列coordinateの位置を指定する変数xとyは整数(int)でないといけない、、、と思いませんか?
エラーメッセージはまざにそう言っています。
array subscript is not an integer → 配列の添え字が整数でない
参考まで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 物理学 角運動量の式変形が分かりません。 4 2022/08/03 21:04
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- 中学校 中1数学 比例のグラフの座標の読み取り 4 2023/03/28 12:26
- 数学 線形代数の2次元直交座標系、極座標系についての問題がわからないです。 2 2022/07/16 20:42
- 数学 線形代数の問題について教えて欲しいです。 3 2023/05/06 23:13
- docomo(ドコモ) ドコモのラクラクホン(アンドロイド)で、平面直角座表の位置に、たどり着く事が出来る、アプリは? 2 2023/06/23 21:12
- 数学 【 数I 放物線と直線の共有点 】 問題 放物線y=x²+ax+bが点(1,1)を通り, 直線y=2 4 2022/07/18 09:57
- 数学 2次関数y=ax^2のグラフは点A(4,2)を通っている。y軸上に点BをAB=OB(Oは原点)となる 1 2022/04/08 00:05
- 数学 ベクトルの単元で、 平行四辺形の頂点A、B、Cの座標が与えられて、Dの座標を聞かれる問題がありますが 1 2022/07/04 04:53
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
画像回転について
-
始点、終点の二つの座標と半径...
-
OpenCvSharp4による画像判定解...
-
以下のプログラムは重心を求め...
-
直線上にある点の座標の求め方
-
エクセルで回転する座標の出し方
-
オートシェイプ円弧の中心点、...
-
水素分子の体積要素
-
エクセルである点からの距離で...
-
プログラミングの問題について...
-
SetWindowOrgとSetViewportOrg...
-
タッチパッドのタッチ座標取得
-
c#で直線が図形内にあるか判定
-
visualbasic でform上に正三角...
-
3d 法線ベクトル計算
-
住所から経緯経度を出したい
-
OpenGLの「見える範囲」は何故...
-
図形が重なりあっているかどうか
-
マインクラフト(pc版)で座標...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
エクセルで回転する座標の出し方
-
エクセルである点からの距離で...
-
3次元空間上の2つの座標から...
-
閉図形の座標の配列が右回りか...
-
ダイアログ内コントロールの位...
-
始点、終点の二つの座標と半径...
-
座標を持った平面範囲に座標を...
-
空間上の二点を結ぶ直線上に任...
-
エクセルシート上のマウスポイ...
-
多角形の内部かどうか判定する方法
-
ワード上Shapeの位置情報を統一...
-
Excel VBA で自在に図形を変化...
-
OpenCvSharp4による画像判定解...
-
C言語 配列で座標
-
シーケンサー(PLC?)で制...
-
以下のプログラムは重心を求め...
-
交差する2線分の交点座標の求め方
-
VB6のPrinter.ScaleWidth に対...
おすすめ情報