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

时间:2012-02-23 05:15:21

标签: 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只是反复打印“输入命令:”,而不会让用户输入输入。

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

3 个答案:

答案 0 :(得分:1)

尝试在第二个i实施中初始化read_flush

答案 1 :(得分:1)

在第二个版本中,您似乎没有像在第一个版本中那样将i初始化为零。所以它可能以大于count的垃圾值开始,因此循环永远不会执行。

答案 2 :(得分:1)

两个版本都有相同的错误。您不在字符串的末尾添加NUL。 malloc不会初始化它返回的内存。