- 締切済み
値の取得
質問です。 ある関数を作成したいのですが・・。その関数は引数で、ある値をもらってその値を元にメッセージを出す、という仕組みにしたいのですが、どのような感じにすればいいでしょか?そのエラーメッセージは1000件ほど登録されていて、検索するにあったって何を使えば早いのか、も悩んでいます。switch文だと全ケース書かなくちゃいけなくなるし・・ どうかアドバイスを、または教えて下さい。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- JaritenCat
- ベストアンサー率37% (122/322)
僕の感覚だと1000件程度ならコードに埋め込まなくても、ANo.4さんのようにプログラム起動時にファイルからメモリに読み込んでおく方法で問題ないと思います。 メモリへの保持のやり方は、コードの番号が詰まっているならANo.3さんの1次元配列に読んで配列の添え字を使って表示、コードが飛び飛びならANo.2さんのように構造体の配列でコード検索、としてはどうでしょう。後者で検索する場合、コード順にソートして(配列の最大値を保存して)おけばバイナリサーチが使えますね。 もし、メッセージが多すぎて全部メモリに持つのが難しければ、エラーコードとファイル位置をメモリ(配列)に持っておいて表示するときにファイルから該当メッセージを読んでくる手もあります。
エラーメッセージに適当なフォーマットでエラー番号を入れたファイルを用意しておき、起動時に全部読み込み、エラーが出たときに番号で検索して対応するメッセージを表示させるというのを良く見ます。 エラーメッセージだけが入っているファイルなら、 0001 エラーメッセージX 0500 エラーメッセージY 1000 エラーメッセージZ このようなフォーマットで十分対応できます。
- kaha
- ベストアンサー率23% (41/177)
> そのエラーメッセージは1000件ほど登録されて 「エラーは1000種類あって、各エラーはコード(番号)で判断する。」この解釈でいいですよね? 文字列の配列を作成するのが簡単と思います。 メッセージを配列の添え字だけで取り出せる。 const LPCTSTR ErrMsg[] ={ "ファイル書き込みエラー", // コード000 "演算オーバーフロー", // コード001 … "タイムアウトエラー" // コード999 };
- hitomura
- ベストアンサー率48% (325/664)
自分だったら以下の通り値とメッセージとの対応表を作ります。 (タブを全角スペースで置き換えています) /* メッセージの終了を表す値 */ /* メッセージの元となる値に出てこない値を指定すること */ #define MESSAGE_END (-1) struct { int nID; char* pszText; } tMassages[] = { { 1, "メッセージ1" }, { 2, "メッセージ2" }, { 3, "メッセージ3" }, { MESSAGE_END, "対応するメッセージなし" }, }; void ShowMessage( int nMessageID ) { int i; for ( i = 0; tMassages[i].nID != MESSAGE_END; i++ ); printf( "%s", tMassages[i].pszText); }
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>そのエラーメッセージは1000件ほど登録されていて、 どこに登録されているんですか?これから自分でソース中に埋め込むのですか? あと、OSは?
補足
エラーメッセージは同じディレクトリにあります。 .txtで作りました。 fopenで開こうと考えています。 osはLinuxです。エディタで動かしています。