質問: ファイルの読み込みと構造体 こんばんは☆ cのプログラミングに困っています(>_<) テキストファイル(meibo.txt) 田中 32 公務員 佐藤 20 学生 というファイルを読み込んで、構造体に入れて表示するには どうしたらよいでしょうか? struct meibo{ char name[20]; int age; char job[20]; }list[3]; としたあとにどのように入れたらよいかがわかりません... わかる方教えてくださいm(_ _)m
回答: ★回答者no.6です。 ・デバッグしてみました。 どうやら回答 no.6 のサンプルに一部間違いがありました。 それが原因で文字化けしていました。 修正版: for ( j = 0, n++ ; string[n] != '\n' ; n++, j++ ){ list[ i ].job[ j ] = string[ n ]; } list[ i ].job[ j ] = '\0'; 修正箇所1: ・job 配列の添え字に n を使っていたのが間違いです。 正しくは新しいカウンタ変数 j などを用意して添え字が 0 から始まるようにします。 これにより最後の '\0' も job[ j ] = '\0'; と j カウンタに変更します。 修正箇所2: ・for()文の条件式で string[n] != '\0' としていましたが、改行を job 配列に 含めないようにするため string[n] != '\n' と変更して下さい。 修正箇所3: ・meibo 構造体の job のサイズが 5 です。 質問にあるテキストファイル(meibo.txt)には『公務員』『学生』ですよね。 『学生』はともかく『公務員』はサイズが 6 です。'\0'文字も含めると 7 になります。 配列の容量が不足しています。job[ 10 ]; ぐらいに変更して下さい。 上記の3箇所を修正すれば正しく動きました。 なおスペースが 2 個以上連続していたり、名前が 9 文字以上だったり、または 職業名が 4 文字以上だと name、job の配列容量を越えます。この辺のチェックを 付け加えた方が良いでしょう。あとポインタを使ったり、strcpy()、atoi() 関数を 使って処理させる方法もあります。いろいろと工夫してみてください。