• ベストアンサー

scanfが2回使えない・・・?;

scanfが使えなくて困っています。どなたか教えていただけないでしょうか(>_< 現在scanfが2つあるプログラムを作っています。 scanfのあるプログラムを実行すると入力待ち画面になりますよね。以下のプログラムを実行すると 1回目のscanfは入力待ちになるのですが2回目は入力待ちにならずに 最後まで行ってしまいます・・。 void main(){ int b; char d, names[20]; printf("名前入力\n"); scanf("%s", &names); printf("1文字キー入力\n"); scanf("%c", &d); printf("\n名前は %s : キーは %c です。\n", names, d); } 実行結果 -------------------------------------- 名前入力 dra2jp 1文字キー入力 名前は dra2jp : キーは です。 -------------------------------------- 名前入力のところは入力待ちになるのですがキー入力ができずに一気に最後までいってしまい、 つまり2回入力待ちにならなければならないのに1回の入力でプログラムが終了してしまいます。 どこが間違っているのでしょうか(>_< どなたかご指導お願いします:;

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

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

scanf("%s", &names); は厳密には間違いで, scanf("%s", names); ですよねと思いつつ, そのあとに while ((c = getchar()) != '\n'); とでも書いておくのが安全じゃないでしょうか. ちなみに fflush を stdin のような入力ストリームに対して用いるのは未定義動作なので, ポータブルなプログラムを作るときには避けるべきでしょう.

dra2jp
質問者

お礼

なんでかわからないけど while (1){ d = getchar(); if(d=='y') break; } にしたらできました^^; お二人のご意見はごもっともだと思うのですが while ((c = getchar()) != '\n'); とかでもうまくいかず:; 何がともあれお世話になりました!

その他の回答 (1)

noname#30727
noname#30727
回答No.1

最初の scanf("%s", &names); で改行までの文字列が入力され、次の scanf("%c", &d); で改行文字が入力されたのでしょう。 対策方法1 scanf("%s", &names); ↓ gets(names); 対策方法2 printf("1文字キー入力\n"); ↓ fflush(stdin); printf("1文字キー入力\n");

dra2jp
質問者

お礼

なんでかわからないけど while (1){ d = getchar(); if(d=='y') break; } にしたらできました^^; お二人のご意見はごもっともだと思うのですが while ((c = getchar()) != '\n'); とかでもうまくいかず:; 何がともあれお世話になりました!

関連するQ&A