- ベストアンサー
初心者です。教えてください、お願いします。
「キーボードから2つの文字を入力し、それぞれ変数h,iに格納する。変数h,iをh,iの順、i,hの順に表示するプログラムを作成せよ。」という課題なのですがうまくできません。どこが間違っているか教えてもらえないでしょうか? #include<stdio.h> int main(void) { char h,i; printf("1つ目の文字を入力してください。\n"); scanf("%c",&h); printf("2つ目の文字を入力してください。\n"); scanf("%c",&i); printf("%c %c\n",h,i); printf("%c %c\n",i,h); return 0; } 実行結果が1文字めを入力すると2文字目の入力にならずに終了してしまいます。 ***実行結果*** 1つ目の文字を入力してください。 a 2つ目の文字を入力してください。 a a ********** おねがいします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
回答より先に、どこがおかしいのか確認しましょう。 確認するためには。 printfで %c ではなく、%dで数値を表示してみましょう。 printf("%d %d\n",h,i); printf("%d %d\n",i,h); に変えて実行したら、 1つ目の文字を入力してください。 a 2つ目の文字を入力してください。 97 10 10 97 こうなります。 さあ、iにはなにが入ってるのでしょう。 10ということは…? さて、文字コードが、十進の10って、何かなあ。 ヒント: 1.scanfは入力をすべてそのまま解釈します。 2.キーボードで入力した文字は本当に'a'だけでしょうか。
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
scanf("%c%*c",&h); scanf("%c%*c",&i); にしてみるとか
お礼
*をつけることによって改行の読み捨てができるのですね。 わかりました。ありがとうございました。
- ayappe
- ベストアンサー率16% (4/25)
1文字目入力したとき、何を押しますか? それが原因ですね。2文字目のiにはそいつが入っちゃってますね。だから表示は合ってますね☆ 1個目のaと2個目のaが何で1行空いてるのかな?それを考えたら自ずと分かると思います。
お礼
原因がわかりました。勉強不足ですw ありがとうございました。
- rentahero
- ベストアンサー率53% (182/342)
もうひとつ。 キーボードからの入力にはscanfも使えますが、1文字入力専用の関数はなかったでしょうか? 調べてみてください。
お礼
早速の回答ありがとうございます。 改行文字もバッファの中に残ってしまうのですね、納得です。