为了读取多字串,我一直在使用gets() 函数。该gets()
函数的行为对我来说是不可预测的,我fflush(stdin)
在每个gets()
语句之前使用该语句以避免出现问题。以这种方式使用这个语句合适吗?有什么替代方法?
问问题
162 次
3 回答
3
fflush
仅刷新输出流。
如果你想刷新标准输入,请继续阅读,直到你得到EOF
,比如:
int i;
while (((i = getchar()) != '\n') && (i != EOF));
于 2013-06-24T09:29:20.803 回答
2
您可以使用 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;
}
于 2013-06-24T09:31:11.983 回答
1
您可以使用带有适当正则表达式的 scanf 语句。
scanf("%[^\n]s",str);
或者可能是一个 fgets 声明。fgets(str, sizeof(str),stdin));
于 2013-06-24T09:32:03.250 回答