- ベストアンサー
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回の入力でプログラムが終了してしまいます。 どこが間違っているのでしょうか(>_< どなたかご指導お願いします:;
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
scanf("%s", &names); は厳密には間違いで, scanf("%s", names); ですよねと思いつつ, そのあとに while ((c = getchar()) != '\n'); とでも書いておくのが安全じゃないでしょうか. ちなみに fflush を stdin のような入力ストリームに対して用いるのは未定義動作なので, ポータブルなプログラムを作るときには避けるべきでしょう.
その他の回答 (1)
最初の scanf("%s", &names); で改行までの文字列が入力され、次の scanf("%c", &d); で改行文字が入力されたのでしょう。 対策方法1 scanf("%s", &names); ↓ gets(names); 対策方法2 printf("1文字キー入力\n"); ↓ fflush(stdin); printf("1文字キー入力\n");
お礼
なんでかわからないけど while (1){ d = getchar(); if(d=='y') break; } にしたらできました^^; お二人のご意見はごもっともだと思うのですが while ((c = getchar()) != '\n'); とかでもうまくいかず:; 何がともあれお世話になりました!
お礼
なんでかわからないけど while (1){ d = getchar(); if(d=='y') break; } にしたらできました^^; お二人のご意見はごもっともだと思うのですが while ((c = getchar()) != '\n'); とかでもうまくいかず:; 何がともあれお世話になりました!