C 使用语句fflush(stdin)有多合适?

C 使用语句fflush(stdin)有多合适?,c,gets,C,Gets,为了读取多字字符串,我一直在使用get()函数。gets()函数的行为对我来说是不可预测的,我在每个gets()语句之前使用语句fflush(stdin),以避免出现问题。以这种方式使用此语句是否合适?什么是替代方法?fflush仅刷新输出流 如果要刷新标准输入,请继续读取,直到获得EOF,类似于: int i; while (((i = getchar()) != '\n') && (i != EOF)); 您可以使用fgets()而不是get(): 正如其他人所说,get(

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

fflush
仅刷新输出流

如果要刷新标准输入,请继续读取,直到获得
EOF
,类似于:

int i;
while (((i = getchar()) != '\n') && (i != EOF));
您可以使用fgets()而不是get():

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

char buffer[BUFSIZ];

while (fgets(buffer, sizeof(buffer), stdin) != 0)
{
    ...process line of data...
}
还没有人提到的是get()不包括换行符,但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;
}

可以将scanf语句与适当的正则表达式一起使用

scanf("%[^\n]s",str);


或者可能是fgets语句。
fgets(str,sizeof(str),stdin))

谢谢!但是,如果事先不知道BUFSIZ,并且我使用char指针创建了一个字符串,那么如何使用fgets()呢?BUFSIZ只是一个常量,可以定义为#define BUFSIZ 255或其他一些东西。。。