好的,我确定我在这里遗漏了一些东西,但我不知道它是什么,我希望有人能帮我弄清楚。
我正在从命令行读取输入,并正在编写一个使用 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() 的版本之一:
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 一遍又一遍地打印“输入命令:”,而没有给用户输入输入的机会。
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() 的哪些微妙之处?