- 締切済み
整数型の最大、最小エラー判定
初歩的な質問なのですが、キーボードから整数を入力して-32768~32767以内だったら代入し、それ以外の場合は入力を促すようにしたいのですがうまくいきません。どなたか教えてください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- tuyo1980
- ベストアンサー率0% (0/2)
#include(stdio.h) void main(void) { int input; scanf("%d",&input) if((-32768<=input) && (input <=32768)) printf("-32768~32767以内\n") else return; } かな…
- jacta
- ベストアンサー率26% (845/3158)
C++で、かつ表現範囲が-32768~32767ピッタリの汎整数型が存在するなら、適当に文字列strに入力した後、 std::istringstream iss(str); short t; // -32768~32767ピッタリの型で宣言 iss >> t; if (!iss) goto retry; のようにすることも可能ですね。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★上手く long 値に変換できたら。 ・strtol() 関数などで long 値に変換できたら範囲チェックを行います。 この範囲チェックで最も一般的な記述方法は、 if ( (value >= -32768) && (value <= 32767) ){ /* 範囲内 */ } となりますね。見た目どおりに。 ・でも次の方法でも範囲チェックが出来ます。 if ( (unsigned long)(value + 32768) < 65536UL ){ /* 範囲内 */ } ・どちらの方法でもチェックは出来ますが、下の方法は加算、比較の2ステップですので ちょっとだけ高速になります。今の時代はあまり気にしないでも良い時代ですがこんな 判定方法もありますよ。ってね。 ・その他、 0~9 までの範囲は if ( (unsigned int)value < 10 ){ … } とか、 'a'~'z'まので範囲は if ( (unsigned int)(ch - 'a') < 26 ){ … } とか といろいろを応用できます。 ・以上。範囲チェックについてでした。
- Werner
- ベストアンサー率53% (395/735)
1. 適当な方法でキーボードから文字列を得る。 2. strtol関数を使って文字列をlong型に変換。 このとき、long型で表現できる値を超えていないかどうかチェックする。 http://www9.plala.or.jp/sgwr-t/lib/strtol.html 3. -32768~32767の範囲内かどうかチェックする。 4. 2や3のチェックに引っかかったら1からやり直し。
お礼
Wernerさんありがとうございます。 教えていただいた方法でやってみます。