来自 GNU C 库手册:
功能:char * fgets (char *s, int count, FILE *stream)
fgets 函数从流中读取字符直到换行符(包括换行符),并将它们存储在字符串 s 中,添加一个空字符来标记字符串的结尾。您必须在 s 中提供 count 个字符的空格,但读取的字符数最多为 count − 1。额外的字符空间用于在字符串末尾保存空字符。
因此,fgets(key,1,stdin);
读取 0 个字符并返回。(阅读:立即)
使用getchar
或getline
代替。
编辑:一旦流上有可用的字符,fgets 也不会返回count
,它会一直等待换行符,然后读取count
字符,因此在这种情况下,“任何键”可能不是正确的措辞。
您可以使用此示例来避免行缓冲:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
int mygetch ( void )
{
int ch;
struct termios oldt, newt;
tcgetattr ( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr ( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr ( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
int main()
{
printf("Press any key to continue.\n");
mygetch();
printf("Bye.\n");
}