• ベストアンサー

int の型に 2バイト文字が入ってきた場合

intの型に2バイト文字が入ってきた場合、その入力は間違いだ、という判断をさせる方法はありますか? int key; scanf("%d", &key); 例えばこれに漢字とかひらがなを入力した場合、 間違いとのメッセージを出したい場合はどのようにすれば いいのでしょう。

質問者が選んだベストアンサー

  • ベストアンサー
  • ret
  • ベストアンサー率40% (8/20)
回答No.2

えぇ~と…判断できないことはないです。 scanfの戻り値を確認してやればよいのでは?。 int d, ret; d = 0; ret = scanf("%d", &d); if( d == 0 && ret == 0){ printf("不正"); } てな感じでしょうか?。 というより、scanfは使わないほうがいいですよ。 scanfは入力データをバッファリングしていますが 複改文字はそのままバッファに残します。 ですので、次の入力操作が行われた際に予期せぬ誤動作を招くことがあります。 (まぁ、その対応をしていれば問題ないですが…(^^;) また、scanfは読み込み不一致発生時にデータをバッファに残します。 若しwhileループ等でscanfを使っているならば 下手をすれば無限ループに陥る可能性もあります。 (あくまで可能性ですよ…(^^;)。 fgetsで読み込み、sscanfやatoiを使うのが堅実です。 但しfgets使用時はファイルにリダイレクトしていないという前提のもとで 使わなければなりません。

alx
質問者

お礼

よーくわかりました。 アドバイスまでいただき、ありがとうございます。

その他の回答 (1)

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.1

scanfでは入力文字のチェックはできませんので ・一度、fgets()などを使って文字列として入力し、 ・文字列の検査をしてから ・NGならメッセージを出力して再入力へ ・OKならatoi()で文字列をint型に変換する という手順人ります。 尚、gets()は入力文字数の制限ができないので、バッファオーバフローの 危険性がありますので使うべきではありません。 http://www.bohyoh.com/CandCPP/C/Library/fgets.html

参考URL:
http://www.bohyoh.com/CandCPP/C/Library/fgets.html
alx
質問者

お礼

なるほど! よくわかりました。 ありがとうございます。

関連するQ&A