• ベストアンサー

初心者です。教えてください、お願いします。

「キーボードから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 ********** おねがいします。

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

  • ベストアンサー
  • rentahero
  • ベストアンサー率53% (182/342)
回答No.1

回答より先に、どこがおかしいのか確認しましょう。 確認するためには。 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'だけでしょうか。

dmcderodero
質問者

お礼

早速の回答ありがとうございます。 改行文字もバッファの中に残ってしまうのですね、納得です。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

scanf("%c%*c",&h); scanf("%c%*c",&i); にしてみるとか

dmcderodero
質問者

お礼

*をつけることによって改行の読み捨てができるのですね。 わかりました。ありがとうございました。

  • ayappe
  • ベストアンサー率16% (4/25)
回答No.3

1文字目入力したとき、何を押しますか? それが原因ですね。2文字目のiにはそいつが入っちゃってますね。だから表示は合ってますね☆ 1個目のaと2個目のaが何で1行空いてるのかな?それを考えたら自ずと分かると思います。

dmcderodero
質問者

お礼

原因がわかりました。勉強不足ですw ありがとうございました。

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.2

もうひとつ。 キーボードからの入力にはscanfも使えますが、1文字入力専用の関数はなかったでしょうか? 調べてみてください。

関連するQ&A