- ベストアンサー
C言語のファイルの入出力について
- C言語のファイルの入出力について説明します。
- 現在、下記の課題に取り組んでいるのですが、qsortの所で詰まってしまいました。どなたか修正点を教えて頂けないでしょうか?
- 電卓アプリケーションの作成について説明します。四則演算ができるアプリケーションで、計算結果をログファイルに保存し、昇順または降順でログを表示する機能もあります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
多分ですが、qsortを使おうとしたことが、そもそもの原因でしょう。 この命令だと、 2015/04/26 10:20:00, 5 + 6, 「11」←最後のカッコ 2015/04/27 14:30:51, 7 - 6, 「1」←最後のカッコ だけをソートする物なので、それだと、日付や計算のログがソートの対象になりません。 なので、qsortをやめるのが先でしょうね。 私ならですが、 struct _tag_log { // 今回日付は、後から変化しない想定なので、char datetime[入りきるサイズ];で代入時点で確定でもOK int year; // 代入段階で1900加算 int month; // 代入段階で1加算 int day; int hour; int min; int sec; // num1+op+num2も後から変化しないので文字列化してしまってもいい int num1; int op; // char op;をintにキャストするかunion化 int num2; // 大事なのはソート対象となるこの変数のみ。 int answer; } これを1セットとして、必要個数配置。 それをもとに base[n].answer <> base[n+1].answerの比較を ASC/DESCでn-1までループ ただし、そのままやると、構造体そのものを入れ替える オーバーヘッドが大きいので、 index[n]=n; を最大数までやったテーブルを作り その中だけを入れ替えるでしょうね。 または、log自体をポインターとして、ポインタのみをソートするか などが私がやると思われるやり方でしょうね。 (別に速度チューニングは不要でしょうから、動けば何でもいいかとは、 思いますけどね)
その他の回答 (1)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
>qsortの所で詰まってしまいました。 どういう、状態なのかも書いてもらえたらな気がするものの。 answer = (float)num1 / num2; この計算の結果を「どこにも書いてない」のが気になります。 char sin[9]; こちらに代入している部屋がないのです。 また、floatにしているわけですが、ソート対象となる変数は signed char幅なので、-128~+127でしかないので、 この変数に入れるつもりなら、floatにした意味が全くありません。 (小数点を入れられないので結局切り捨てられる) なので、うまくいかない?のではなく、 そもそも、代入してない?が原因だと思います。