【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.20695

HIGH-VALUEは存在しますか?
投稿者---ringo(2005/04/20 14:23:35)


Windows2000 Microsoft Visual C++ を使用しています。

質問なのですが、COBOLで言うところの「HIGH-VALUE」のようなものは
Cには存在しないのでしょうか?

キーのマッチングをしていて、ファイルEOFの場合、
キーエリアにHIGH-VALUEのようなものをセットしたいと考えています。

現在はEOFの時に'Z'でキーエリアを埋めています。
比較する値は数字しか入らない予定です。

いくつか下のツリーを見て「A < Z」は環境によって
そうじゃなくなる場合があると見まして不安になりました。
「数値<Z」の場合でも環境によっては保証されないのでしょうか?
現在の環境ではうまくいってるみたいですが・・・。

ご教授、宜しくお願い致します。



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:HIGH-VALUEは存在しますか? 20696 Ban 2005/04/20 14:53:42


No.20696

Re:HIGH-VALUEは存在しますか?
投稿者---Ban(2005/04/20 14:53:42)


>質問なのですが、COBOLで言うところの「HIGH-VALUE」のようなものは
>Cには存在しないのでしょうか?

ありません。

>現在はEOFの時に'Z'でキーエリアを埋めています。
>比較する値は数字しか入らない予定です。

前提が数値以外全て無効値であれば、
isdigit なり isalpha なりの比較(もしくは直接 == 'Z'とか)
でもいいのではないでしょうか。

>「数値<Z」の場合でも環境によっては保証されないのでしょうか?

C 言語の標準規格(ISO/IEC9899:1990)を見る限り、
「数字」と「英字」のコードについては順序の保証がありません。

数字がシーケンシャルな事は保証されてますので、
数字に対して「0以上かつ9以下か」という形の評価はできると思いますが、
逆に言うと、それくらいしか数字と英字に対する直接範囲の評価は保証されません。

# そういう環境依存を吸収するのが標準ライブラリの is〜 などの仕事です。


不等号で他の数値と同列に判断したいのであれば、
HIGH_VALUE をマクロなりで定数適宜しておいて、
環境毎に数値より大きな文字コードを設定させるとか.....。
# で、現環境では Z を使う。


この投稿にコメントする

削除パスワード

No.20697

Re:HIGH-VALUEは存在しますか?
投稿者---ringo(2005/04/20 15:26:23)



>前提が数値以外全て無効値であれば、
>isdigit なり isalpha なりの比較(もしくは直接 == 'Z'とか)
>でもいいのではないでしょうか。

不等号で他の数値と同列比較したかったのでHIGH-VALUEのような
ものがあれば余計なロジックを書かなくてすむなーと思った次第です。


>数字がシーケンシャルな事は保証されてますので、
>数字に対して「0以上かつ9以下か」という形の評価はできると思いますが、
>逆に言うと、それくらいしか数字と英字に対する直接範囲の評価は保証されません。

さらに質問して申し訳ないのですが
1<2 というのは保証されるけれど
"1"<"2" というのは保証されないのでしょうか?


>不等号で他の数値と同列に判断したいのであれば、
>HIGH_VALUE をマクロなりで定数適宜しておいて、
>環境毎に数値より大きな文字コードを設定させるとか.....。

せっかく教えていただいたのですが、環境毎に設定を変えるということを
あまりしたくないので、今回はロジックで逃げることにします。




この投稿にコメントする

削除パスワード

No.20699

Re:HIGH-VALUEは存在しますか?
投稿者---YuO(2005/04/20 15:55:57)


>さらに質問して申し訳ないのですが
>1<2 というのは保証されるけれど
>"1"<"2" というのは保証されないのでしょうか?

当然保証されません。
'1'<'2'であれば保証されますが。



この投稿にコメントする

削除パスワード

No.20702

Re:HIGH-VALUEは存在しますか?
投稿者---REE(2005/04/20 16:47:14)


>不等号で他の数値と同列比較したかったのでHIGH-VALUEのような
>ものがあれば余計なロジックを書かなくてすむなーと思った次第です。

char型を使っているのであれば、CHAR_MAXはどうですか?
(int型を使っているのであれば、INT_MAX)
まあ、環境によってはCHAR_MAX == '9'の可能性もないとは言えませんが、その場合は、もともとHIGH-VALUEにあたるものが存在しません。


この投稿にコメントする

削除パスワード

No.20708

Re:HIGH-VALUEは存在しますか?
投稿者---ringo(2005/04/20 19:44:58)


>char型を使っているのであれば、CHAR_MAXはどうですか?
>(int型を使っているのであれば、INT_MAX)

ということは、現在

memset( sBuff, 'Z', sizeof( sBuff ) - 1);

としてるところを

memset( sBuff, CHAR_MAX, sizeof( sBuff ) - 1);

にするということでしょうか?




この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧