为了读取多字串,我一直在使用gets() 函数。 gets() 函数的行为对我来说是不可预测的,我在每个 fflush(stdin) 语句之前使用语句 gets() 以避免出现问题。以这种方式使用此语句是否合适?什么是替代方法?

最佳答案

您可以使用 fgets() 而不是 gets(): https://stackoverflow.com/a/4309760/1758762

正如其他人所说,gets() 的规范替代方案是 fgets() 将 stdin 指定为文件流。

char buffer[BUFSIZ];

while (fgets(buffer, sizeof(buffer), stdin) != 0)
{
    ...process line of data...
}

没有人提到的是,gets() 不包含换行符,但 fgets() 包含。因此,您可能需要在 fgets() 周围使用包装器来删除换行符:
char *fgets_wrapper(char *buffer, size_t buflen, FILE *fp)
{
    if (fgets(buffer, buflen, fp) != 0)
    {
        size_t len = strlen(buffer);
        if (len > 0 && buffer[len-1] == '\n')
            buffer[len-1] = '\0';
        return buffer;
    }
    return 0;
}

关于c - 语句 fflush(stdin) 的使用有多合适?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17272090/

10-11 22:10
查看更多