ページ 11

if文で条件分岐させた後の入力について

Posted: 2012年1月16日(月) 22:05
by N_Angelo
はじめまして。さっそく質問させていただきます。
私はC言語を勉強し始めて3か月半なんですが、練習でとあるプログラムを組んでいます。
if文で分岐した後に文字列を入力する部分のあるプログラムを組んでいるのですが、次のコードのプログラムでyを入力すると、入力の部分が無視され最後まで処理が進んでしまいます。
以下のコードは例です。

コード:

#include <stdio.h>

int main(void)
{
	char choice,name[8];
	printf("名前を入力してください。入力したいならyを、したくないならnを入力してください\n");
	choice = getchar();
	if(choice == 'y'){
		fgets(name,sizeof(name),stdin);
		printf("%s\n",name);
	}else if(choice == 'n'){
		printf("名無し?\n");
	}
	return 0;
}
yを入力した後の入力を無視せず、ちゃんと入力して結果を返すようにしたいのですが、原因がわかりません。
使っているOSは Windows7
使っているコンパイラは Microsoft Visual C++ 2010 Expressです。
教えていただければ幸いです。

Re: if文で条件分岐させた後の入力について

Posted: 2012年1月16日(月) 22:38
by beatle
y
と入力すると,実際には'y'と'\n'という2文字がプログラムに送られます.
getcharでは'y'しか読み込まず,まだ'\n'が溜まっている状態でfgetsを呼び出してしまっているため,fgetsは改行だけの行を読み込んでいることになります.
入力が無視されているのではなく,fgetsはきちんと働いているのですが,ただ単にそれが意図しない動作というだけです.

fgetsを1回実行すると'\n'を読み飛ばせますから,そのあとで再度fgetsを実行すれば名前を読み込むことができます.

Re: if文で条件分岐させた後の入力について

Posted: 2012年1月16日(月) 22:42
by non
7行と8行の間に 
grtchar();
を入れてみてもOKだよ。

Re: if文で条件分岐させた後の入力について

Posted: 2012年1月16日(月) 23:59
by N_Angelo
beatleさん。
nonさん。
問題が解決しました。
ありがとうございますm(_ _)m

Re: if文で条件分岐させた後の入力について

Posted: 2012年1月17日(火) 00:00
by N_Angelo
送信の横に 解決! というチェックボックスがあったのでチェックを入れてみるテスト。