- ベストアンサー
gets_sがうまく動かない
プログラムで、はじめにscanf_sで数値入力させ、 次にgets_sで文字列入力させようとするのですが、 入力できずに通過してしまいます。何故なのでしょう? ==プログラム== scanf_s~~数字+エンター gets_s~~通過してしまう gets_s~~文字列入力可
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>あくまでもscanf_sを用いつつ、通過させない方法はあるのでしょうか? scanf_s~~数字+エンターの直後に rewind(stdin); を入れてみてはいかがでしょうか。 参考URLの受け売りなので、自信なしです。
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.4
#3 の rewind(stdin); でも動くかもしれませんが, 可能なら scanf_s("%d\n", &x); あるいは scanf_s("%d%*[^\n]\n", &x); のように明示的に改行コードを処理した方がよいと思います. 後者の方が安全か な?
- tatsu99
- ベストアンサー率52% (391/751)
回答No.2
全てgets_sで統一されてはいかがですか。 その場合、最初は、数字を入力させますが、文字として入ってきます。 ですので、これを、atoi関数などで、int型に変換します。
質問者
お礼
あくまでもscanf_sを用いつつ、通過させない方法はあるのでしょうか?
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
お約束パターンなんだろーなー. scanf_s で数値を入力したときに, 最後に打った「エンター」が残っていて, それが次の gets_s で読み込まれています.
質問者
お礼
そうなんでしょうねぇ・・ 何か解決策はないものでしょうか? 今はダミーでgets_sを二重にしてますが・・
お礼
非常に参考になりました! ありがとうございました!