C 使用语句fflush(stdin)有多合适?
为了读取多字字符串,我一直在使用get()函数。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(
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或其他一些东西。。。