在fgets()之后,换行符保持在缓冲区中?

时间:2010-12-05 23:51:51

标签: c newline fgets getchar

以下是导致我出现问题的代码片段:

#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()那样的hacky),以便getchar()在输入名称后将按预期等待字符?

1 个答案:

答案 0 :(得分:0)

我无法在Mac OS X系统上使用GCC复制您的问题。您是否正在使用Windows系统,按ENTER可能同时产生CRLF

无论如何,请注意,getchar()通常不会在按一次键后立即返回,因为默认情况下,大多数系统stdin 行缓冲,这意味着终端在按下ENTER之前,子系统不会向用户进程传递任何字符。

getchar()不能替代<conio.h>之类的旧DOS getch()函数。

解决这个问题取决于你的O / S..