1406711318 C言語についての質問です。


いつもお世話になっています。

あるプログラムを考えるにあたって、理由のわからない部分があったので教えてほしいです。
またもや文字入力に関してなのですが
 char mh;
 scanf_s("%c", &mh);
 printf(">>%c", mh);
この部分のscanf_s("%c", &mh);がなぜか読み飛ばされてしまします。
前回のような後ろに入力文字数を指定する方法など試してみましたが違いました。

ちなみに僕がしたいのは、一文字読み取ってその文字によって作業を分岐する内容です。
全体像は画像で添付します。

そもそも内容として正しくない可能性もありますが、今のところわからないのは
scanfが読み飛ばされる理由のみです…

何かわかる方いらっしゃればご教授よろしくお願いします。

参考ページ(作ろうとしている内容が載ってます)
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2000

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/08/06 18:10:04

回答1件)

id:siachan No.1

回答回数91ベストアンサー獲得回数23

おそらく入力バッファに改行コードが残ってるのが原因だと思います。

これは

		printf(">>%c",mh);

		printf(">>%02X",mh);

にしてみると確認できます。

なので

	scanf_s("%d\n",&m);

	putchar('\n');
	for(int i = 0; i < m; i++) {
		scanf_s("%c %d\n",&mh,1,&mk);
		printf(">>%c",mh);
		flag = tansa(p, x, y, mh, mk);

こうしてみてはどうでしょう。

ここ以外では「数値」を入力データの対象にしているので改行コードは無視されていますが、mhの部分では「文字」が対象になるので、改行コードがデータとして取り込まれています。

id:los19

なるほど…、確かにうまくいきました!あるがとうございます!
勉強不足のせいで、なぜそうなるのか理解が難しいですがそこは自分で調べてみます><

2014/07/31 00:50:40

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません