さて、ここで私が見逃しているものがあると確信していますが、それが何であるかはわかりません。誰かがそれを理解するのを手伝ってくれることを願っています。
コマンドラインから入力を読み込んでいて、fgetc()を使用してそれを行う関数を書いていました。ただし、一見表面的な機能の変更により、動作が完全に異なります。
これはmain()関数です:
while(1)
{
char* cmd = malloc(sizeof(char) * 80);
printf("Enter command: ");
read_flush(cmd, 80);
printf("%s\n", cmd);
free(cmd);
}
そして、これはread_flush()のバージョンの1つです。
int read_flush(char* buffer, int count)
{
int i, c;
for(i = 0; i < count; i++)
{
c = fgetc(stdin);
if(c == '\n' || c == EOF)
return i;
buffer[i] = (char)c;
}
return i;
}
これは問題なく動作します。入力を入力すると、吐き出されます。ただし、この次のバージョンでは、mainは、ユーザーに入力を入力する機会を与えずに、「Entercommand:」を繰り返し出力します。
int read_flush(char* buffer, int count)
{
int i, c;
while(i < count)
{
c = fgetc(stdin);
if(c == '\n' || c == EOF)
return i;
buffer[i] = (char)c;
i++;
}
return i;
}
ここでfgetc()の微妙な点が欠けていますか?