2010-12-05 7 views
1

は、ここで私の問題を引き起こしているコードの抜粋です:改行はfgets()の後でバッファに残りますか?

#define MAX_NAME_LEN 64 

char choice; 
char name[MAX_NAME_LEN]; 
printf("Name: "); 
fgets(name, MAX_NAME_LEN, stdin); 
choice = getchar(); 

私は名前と入力し、Enterキーを押します後、getchar関数()次の文字を待っているのではなく、同様の改行をキャプチャします。 getchar()が名前を入力した後に期待どおりの文字を待つように、コードを修正するにはどうすればいいですか?

+1

'MAX_NAME_LEN'に追加しないでください - ' fgets() 'は' n-1'文字だけを読み込み、終了NULのために残しておきます。 – Alnitak

+0

ああ、そうです。訂正してくれてありがとう。 – linkmaster03

答えて

0

Mac OS XシステムでGCCを使用して問題を再現することができません。 ENTERを押すとCRLFの両方が生成されるWindowsシステムを使用していますか?いずれにしても

、ほとんどのシステムstdinでは、デフォルトで行は、端末サブシステムがするまで、ユーザプロセスに任意の文字を提供しないことを意味し、をバッファリングされているためgetchar()は、通常、単一のキーを押した後、すぐには戻らないことに注意してくださいENTERが押されました。

getchar()は、getch()のような古いDOS <conio.h>の機能に代わるものではありません。

あなたの周りのO/Sの状況によって異なります。

+0

いいえ、私はLinux上です。 – linkmaster03

+0

fgetsは常に改行を読む(http://linux.die.net/man/3/fgets)。 '改行が読み込まれた場合、それはバッファに格納されます。 ' –

+1

ええ、私はそうではないと言いました。明らかに何も入力されていないのは、fgets()とgetchar()の両方の呼び出しが完了するためです。それは私にとってはうまくいく。 – Alnitak

関連する問題