電子書籍の厳選無料作品が豊富!

初歩的な質問なのですが、キーボードから整数を入力して-32768~32767以内だったら代入し、それ以外の場合は入力を促すようにしたいのですがうまくいきません。どなたか教えてください。

A 回答 (4件)

#include(stdio.h)



void main(void)
{
int input;

scanf("%d",&input)

if((-32768<=input) && (input <=32768))
printf("-32768~32767以内\n")

else
return;
}

かな…
    • good
    • 0

C++で、かつ表現範囲が-32768~32767ピッタリの汎整数型が存在するなら、適当に文字列strに入力した後、



std::istringstream iss(str);
short t; // -32768~32767ピッタリの型で宣言
iss >> t;
if (!iss) goto retry;

のようにすることも可能ですね。
    • good
    • 0

★上手く 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 ){ … } とか
 といろいろを応用できます。
・以上。範囲チェックについてでした。
    • good
    • 0

1. 適当な方法でキーボードから文字列を得る。



2. strtol関数を使って文字列をlong型に変換。
このとき、long型で表現できる値を超えていないかどうかチェックする。
http://www9.plala.or.jp/sgwr-t/lib/strtol.html

3. -32768~32767の範囲内かどうかチェックする。

4. 2や3のチェックに引っかかったら1からやり直し。
    • good
    • 0
この回答へのお礼

Wernerさんありがとうございます。
教えていただいた方法でやってみます。

お礼日時:2007/05/20 14:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!