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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
N_Angelo

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

#1

投稿記事 by N_Angelo » 14年前

はじめまして。さっそく質問させていただきます。
私は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です。
教えていただければ幸いです。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

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

#2

投稿記事 by beatle » 14年前

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

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

non
記事: 1097
登録日時: 15年前

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

#3

投稿記事 by non » 14年前

7行と8行の間に 
grtchar();
を入れてみてもOKだよ。
non

N_Angelo

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

#4

投稿記事 by N_Angelo » 14年前

beatleさん。
nonさん。
問題が解決しました。
ありがとうございますm(_ _)m

N_Angelo

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

#5

投稿記事 by N_Angelo » 14年前

送信の横に 解決! というチェックボックスがあったのでチェックを入れてみるテスト。

閉鎖

“C言語何でも質問掲示板” へ戻る