- ベストアンサー
テキストファイルから文字列を読み込んで二次元配列に格納するには
毎回お世話になっています。 ただいまC言語を勉強中の学生です。 基本的な文法は頭に入れたつもりでしたが、まだポインタと ファイルの入出力に苦手意識があり 実際うまくできないでいるので どなたか ご存知の方にアドバイスいただければと思って書き込ませていただきます。 今回練習しているのは 先に述べたように、テキストファイルに abc def ghi jkl などと文字列を書いておき、そのファイルを読み込んで 二次元配列に格納したいのですが、何を勘違いしているのか、 うまく実現できません。 参考書などを見て 一次元配列へ格納する場合は できたようなのですが、今後このプログラムを発展させる段階で 二次元配列に文字列を 格納できたほうが好都合なので 今模索しています。。。 ちなみに 一次元配列に格納する場合は 以下のように書きました。 #include<stdio.h> #include<stdlib.h> main() { char a[10]; FILE *fp; fp = fopen("word.dat", "r"); if (fp == NULL) { printf("File does not exist.\n"); exit(1); } while(fscanf(fp,"%s",a)==1){ printf("%s\n",a); } fclose(fp); return 0; } 実はコレに関しても分からない点があり、それは 目的の配列変数 a[]に格納できたのだから それを確認したいと思い printfで a[0]~a[10]を表示してみようとしたところ 変に文字化け したものが表示されたり、何も表示されなかったり よく分からないことが起きます。私は何を勘違いしてしまっているのでしょうか(>_<) 長々と書いてしまいましたが、今回 御教授いただきたいのは (1)、テキストファイルから 英字の文字列を読み込んで二次元配列に格納するために用いるのに 一番最適な関数はどれか(fscanfやfgetsなど) そして、その関数を使って 一番シンプルな記述をするにはどのように記述すればよいのか (2)、上のようなプログラムの書き方で、配列aにテキストファイルから読み込んで格納できたようなのに、a[0]~a[10]をprintfしたときに うまく中身が表示されないのはなぜか。 という点なのですが、(1)をとりあえず急いでおりますので、(2)はおまけ程度に考えていただければと思います。 なぜかファイルの入出力がいまだに把握できなくて苦手としておりますので、どうか よろしくお願いいたします。
- みんなの回答 (6)
- 専門家の回答
関連するQ&A
- DigitalTVboxで毎週の録画予約(番組A)したが、その番組が終了した後、同日時に変更後の番組(番組B)を録画してしまいます。番組表には変更後の(番組B)に録画マークは表示されないため、録画キャンセルができない状況です。
- そのため、毎週番組を録画削除している状況ですが、手間がかかります。この問題を解決するためには、どのような方法があるのでしょうか?
- DigitalTVboxでの録画予約において、番組変更時の録画キャンセル方法を教えていただきたいです。
お礼
ご親切に プログラムの書き方まで教えてくださったのにお礼が遅くなってしまい 大変申し訳ございませんでした!学生で 日々C言語を使っておりますが、普段使わない文法はどうしても苦手意識があり、路頭に迷っていました(>_<)そして、大まかには書けているのですが、把握しきれていないためにこまごまとバグがみつかるのですが どう間違っていてどう直せば良いのかというのが 本当に分からなくなっていたので 実際にソースを書いていただけて 読めて さらに理解することができました!本当に助かりました!ありがとうございました!