プロが教えるわが家の防犯対策術!

プログラムで、はじめにscanf_sで数値入力させ、
次にgets_sで文字列入力させようとするのですが、
入力できずに通過してしまいます。何故なのでしょう?

==プログラム==
scanf_s~~数字+エンター
gets_s~~通過してしまう
gets_s~~文字列入力可

A 回答 (4件)

>あくまでもscanf_sを用いつつ、通過させない方法はあるのでしょうか?


scanf_s~~数字+エンターの直後に
rewind(stdin); を入れてみてはいかがでしょうか。
参考URLの受け売りなので、自信なしです。

参考URL:http://www13.plala.or.jp/kmaeda/cpp_cli/scanf.htm
    • good
    • 0
この回答へのお礼

非常に参考になりました!
ありがとうございました!

お礼日時:2008/10/06 17:47

#3 の rewind(stdin); でも動くかもしれませんが, 可能なら


scanf_s("%d\n", &x); あるいは
scanf_s("%d%*[^\n]\n", &x);
のように明示的に改行コードを処理した方がよいと思います. 後者の方が安全か
な?
    • good
    • 0

全てgets_sで統一されてはいかがですか。


その場合、最初は、数字を入力させますが、文字として入ってきます。
ですので、これを、atoi関数などで、int型に変換します。
    • good
    • 0
この回答へのお礼

あくまでもscanf_sを用いつつ、通過させない方法はあるのでしょうか?

お礼日時:2008/10/06 17:34

お約束パターンなんだろーなー.


scanf_s で数値を入力したときに, 最後に打った「エンター」が残っていて, それが次の gets_s で読み込まれています.
    • good
    • 0
この回答へのお礼

そうなんでしょうねぇ・・
何か解決策はないものでしょうか?
今はダミーでgets_sを二重にしてますが・・

お礼日時:2008/10/06 16:56

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