趣味でゲームを製作しているのですが、その中で、
マップデータのテキストファイルを二次元配列に読み込むようにしています。
データファイルは、カンマ区切りで、例えば、
1,2,3,4,5
5,4,3,2,1
1,2,3,4,5
というようになっています。
fp=fopen(path,"r");
for(j=0; j<3; j++)
{
for(i=0; i<5; i++)
{
char c;
do{c=(getc(fp));}
while(c==','||c=='\n'||c=='\r');
map[j][i] = c-'0';
}
}
配列の各要素に読み込む中身が、0~9など1文字に限られている場合、このgetc()を使う方法で問題ないのですが、0~255など、文字数がまちまちになると、1文字を取り出すgetc()ではできなくなってしまいます。
これがどうすれば可能になるのか、情けないのですがちょっと思いつかないので、アドバイスを頂ければ幸いです。
No.4ベストアンサー
- 回答日時:
少し手を入れたらできそうですね。
{
char c;
do{c=(getc(fp));}
while(c==','||c=='\n'||c=='\r');
//-----------追加-----ここから
// int calc; の宣言要
calc = 0;
do { calc = (c - '0') + (calc*10);}
while(isdigit(c=getc(fp)));
//-----------追加-----ここまで
map[j][i] = calc;
}
具体的にありがとうございました。
例えば123だったら、
1→1*10+2→12*10+3で、123が取り出せるということですね。
これは面白いと思いました。
No.3
- 回答日時:
CSVのようにセパレータで区切られた文字列を処理するときは、
fgets()で一行取り出して、strtok()で分割するのがよろしいかと思います。
参考URL:http://www9.plala.or.jp/sgwr-t/lib/strtok.html
No.2
- 回答日時:
fscanf を使ったらどうですか
読み込むデータ数が決まっているから
fp=fopen(path,"r");
fscanf(fp,"%d,%d,%d,%d,%d\n",&map[0][0],&map[0][1],&map[0][2],&map[0][3],&map[0][4]);
fscanf(fp,"%d,%d,%d,%d,%d\n",&map[1][0],&map[1][1],&map[1][2],&map[1][3],&map[1][4]);
fscanf(fp,"%d,%d,%d,%d,%d\n",&map[2][0],&map[2][1],&map[2][2],&map[2][3],&map[2][4]);
fclose(fp);
でいいかと思います。
実際には巨大な二次元配列なので、全て列挙していくのは難しいのですが、方法としてはシンプルで、よくわかりました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
ロボットの住む世界で流行ってる罰ゲームとは?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
C言語で特定列だけを抽出して配列に格納し、出力したいです。 読み込みファイル(read.txt) 0
C言語・C++・C#
-
fgetsで2行目から文字化け
C言語・C++・C#
-
ファイルから読み込んだデータを構造体に格納できますか?
C言語・C++・C#
-
-
4
C言語で複数列のデータを1列のみ読み込みたい
C言語・C++・C#
-
5
fopenでのパス指定
C言語・C++・C#
-
6
C言語でのCSVファイルの読み出し方法
C言語・C++・C#
-
7
intとlongは同じ?
C言語・C++・C#
-
8
C言語のポインターに関する警告
C言語・C++・C#
-
9
fgetsなどのときのstdinのバッファを消すには?
C言語・C++・C#
-
10
csvファイルをfscanfで読み込むと変な文字が出てきます
C言語・C++・C#
-
11
csvファイルの読み込みで失敗します
C言語・C++・C#
-
12
CSVファイル作成
C言語・C++・C#
-
13
c言語のポインタへの文字列入力についてです。
C言語・C++・C#
-
14
Cで2次元配列にCSVファイルを格納するには?
C言語・C++・C#
-
15
double型の値をchar配列に変換する方法はありますか?
C言語・C++・C#
-
16
適切な変換関数が存在しない???
C言語・C++・C#
-
17
fgets関数を使用したときの文字あふれについて
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語について。
-
3×3のラテン方陣をつくるプログ...
-
VisualStudio2022でC言語プログ...
-
2つほどお聞きしたいことがあり...
-
UART通信の取説で,left floati...
-
10進数からN進数に変換するプロ...
-
gccを行ってもexeファイルが生...
-
MACで動く実行ファイルをWindow...
-
ストリームについて。
-
Cのコンパイルでコメントアウト...
-
Windows Formアプリからコンソ...
-
パソコン
-
今ってプログラミング言語は何...
-
どうして+3
-
プログラミング言語についてc++...
-
次の記述について
-
C#でTreeViewのCheckBoxのサイ...
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
私は
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二つのbxsliderをレスポンシブ...
-
カンマ区切りのデータを配列に...
-
Googleマップのピンをクリック...
-
たくさんの経由地がある巡回ル...
-
googleマップが表示されない。
-
C言語の 配列の中 出力について
-
google maps api v3のルート検索
-
グーグルマップにマーカーを色...
-
how's whether today in yufuin?
-
Google maps api v3と印刷について
-
Javascriptを使ってQRコード読...
-
JavaScriptでtabindexの変更っ...
-
readyStateが4にならない原因
-
階層別の組織図の自動作成について
-
[jQuery UI] sortableを使いaja...
-
JavascriptからPHPへのAjax通信...
-
AjaxでJSONを受信すると、文字...
-
jQueryのblockUIをformのボタン...
-
.txtファイルの読み込み
-
SQLのmaxで求めた値を変数に代...
おすすめ情報