c - 从 fgetc() 读取输入并使用 printf() 打印

标签 c loops printf stdin fgetc

好吧,我确定我在这里遗漏了什么,但我不知道它是什么,我希望有人能帮我弄清楚。

我正在从命令行读取输入,并正在编写一个使用 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 一遍又一遍地打印“Enter command:”,而不给用户输入的机会。

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() 的哪些微妙之处?

最佳答案

尝试在您的第二个read_flush 实现中初始化i

关于c - 从 fgetc() 读取输入并使用 printf() 打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9407561/

相关文章:

ios - 如何在 switch case(swift)中创建循环?

r - 对于列中的每个唯一值,找到最少 4 个日期

c - 等效于在以下代码中写入 printf?

c - 避免解析格式字符串,同时仍然使用 printf 缓冲

c - 让字符超过 C 文件中的某个点

c - 获取目录中文件的大小

C内存分配初始化和处理

数组中的一个元素与同一数组中的所有其他元素的比较

c - 如何将 char 'a' 设置为 char 指针数组?

c++ - 扩展/重组宏元组