趣味でゲームを製作しているのですが、その中で、
マップデータのテキストファイルを二次元配列に読み込むようにしています。
データファイルは、カンマ区切りで、例えば、
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- その他(プログラミング・Web制作) プログラミング python pandas 固定長データの出力 2 2022/08/16 11:22
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
遅刻の「言い訳」選手権
よく遅刻してしまうんです…… 「電車が遅延してしまい遅れました」 「歯医者さんが長引いて、、、」 「病院が混んでいて」 などなどみなさんがこれまで使ってきた遅刻の言い訳がたくさんあるのではないでしょうか?
-
いけず言葉しりとり
はんなりと心にダメージを与える「いけず言葉」でしりとりをしましょう。 「あ」あら〜しゃれた服着てはりますな 遠くからでもわかりましたわ
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
ファイルから読み込んだデータを構造体に格納できますか?
C言語・C++・C#
-
fgetsで2行目から文字化け
C言語・C++・C#
-
C言語でのCSVファイルの読み出し方法
C言語・C++・C#
-
-
4
fopenでのパス指定
C言語・C++・C#
-
5
intとlongは同じ?
C言語・C++・C#
-
6
fgets関数を使用したときの文字あふれについて
C言語・C++・C#
-
7
C言語で特定列だけを抽出して配列に格納し、出力したいです。 読み込みファイル(read.txt) 0
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのデータを配列に...
-
Google Mapsからxmlファイルの...
-
JavascriptからPHPへのAjax通信...
-
EUC-JPに対応しているjQueryを...
-
[jQuery UI] sortableを使いaja...
-
JQueryで動的生成のスライダが...
-
アコーディオンメニューが他に...
-
jqueryを使いajaxで取得したデ...
-
jQueryのblockUIをformのボタン...
-
一定時間ごとに表示内容を切り...
-
同一ページ移動時ハンバーガー...
-
jQueryのアコーディオン一番目...
-
.txtファイルの読み込み
-
Javascriptを使ってQRコード読...
-
jquery.csv2table.jsに検索窓
-
SQLのmaxで求めた値を変数に代...
-
Selenium4でボタンをクリックで...
-
日付が変わると自動更新
-
readyStateが4にならない原因
-
JavaScriptでリンク先コンテン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのデータを配列に...
-
二つのbxsliderをレスポンシブ...
-
迷路探索プログラムを作るには...
-
googleMapでアイコン変更すると...
-
webサービス上のkmlをgooglemap...
-
google maps api v3のルート検索
-
Googleマップのピンをクリック...
-
Google maps api v3と印刷について
-
たくさんの経由地がある巡回ル...
-
Google Maps:同マップ内でそれ...
-
C言語の 配列の中 出力について
-
JavaScriptでtabindexの変更っ...
-
階層別の組織図の自動作成について
-
readyStateが4にならない原因
-
Javascriptを使ってQRコード読...
-
jQueryのアコーディオン一番目...
-
インラインフレームを自動更新...
-
SQLのmaxで求めた値を変数に代...
-
JavascriptからPHPへのAjax通信...
-
jQueryのblockUIをformのボタン...
おすすめ情報