GNU C ライブラリ マニュアルから:
関数: char * fgets (char *s, int count, FILE *stream)
fgets 関数は、ストリーム stream から改行文字まで (改行文字を含む) の文字を読み取り、それらを文字列 s に格納し、文字列の末尾を示す null 文字を追加します。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");
}