質問: max){ printf("%s(%d点)", str4, n4); } fclose(file); getchar(); } ``` score.txtの内容が「James,1000,Tom,1200,Steve,2800,Bob,900」ならば望み通りの実行結果が得られましたが、問題文の通りのscore.txtの内容だと上手く行きません。 fgets()は文字列読み込みの際に\nがあればそこで読み込みを止めるというのは知っているのですが、sscanf()でコンマを飛ばしつつ改行飛び越して4行の文字列と数字を読み込む方法が分かりません。fgetどうか教えて下されば幸いです。 <追伸> fgets()がファイルの最後にNULLが出てくるまでファイル全て読み込ませる意図でwhile文を書きました。ただfgets()は1行ごとにしか読み込めず、1行目読み込んだ後lineに1行目の文字列が格納されるが、それで2行目読み込んだ後lineに1行目の文字列が消された上で2行目の文字列が格納されるのだと思います(ここら辺の細かい仕組みについてはまだあまり理解できていません)。4行目まで読み込んだ後は4行目の文字列しか格納されてないのでしょう(実行時、最高得点の所は表示されたが「最高得点:Bob (900点)」と表示されていた)。fgets()に改行を読み込ませないか、あるいはfgetc()で読み込むという手がありますが、sscanf()とどう結び付ければよいのかが分かりません。 質問書式の体をなしておらずすいませんでした。確かに読む気を起こさせるようなものでは無かったと思っております。これを機会にマナーを守って質問していきます。
回答: 今のプログラムを要約すると、 ファイルを開く 最終行まで読み飛ばす 最終行の内容から4人のデータを解析する 最終行に従って得点表示 最高得点者表示 ファイルを閉じる となってます。 問題点は、「データを読み飛ばしている」(ヒント: whileの条件式の()と、ブロック{}の間にある謎の記号)ことと、「すべての行を一度に処理しようとしていること」です。ロジックをこう変えてみてはどうですか? ``` char 最高得点者名[大きさ]; int 最高得点 = 0; while(fgets(行, 大きさ, file)) { sscanf(行,"%[^,],%d", 名前, &得点); printf("%s %d点"); これまでで最高得点者だったら 最高得点者名と最高得点を更新する。 } 最高得点者の情報を表示する。 ```