• ベストアンサー

gets_sがうまく動かない

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

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

>あくまでもscanf_sを用いつつ、通過させない方法はあるのでしょうか? scanf_s~~数字+エンターの直後に rewind(stdin); を入れてみてはいかがでしょうか。 参考URLの受け売りなので、自信なしです。

参考URL:
http://www13.plala.or.jp/kmaeda/cpp_cli/scanf.htm
hardtechno
質問者

お礼

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

その他の回答 (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型に変換します。

hardtechno
質問者

お礼

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

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

お約束パターンなんだろーなー. scanf_s で数値を入力したときに, 最後に打った「エンター」が残っていて, それが次の gets_s で読み込まれています.

hardtechno
質問者

お礼

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