将 fgets 与 scanf 混合使用并使用 fseek 跳过换行符是否是一种不好的做法? C
Would it be a bad practice to mix fgets with scanf and use fseek to skip the new line characters? C
我想混合使用 fgets
和 scanf
,但是有 '\n'
个字符的剩余部分,它们弄乱了 fgets
输出,我试过了使用:
fseek(stdin, 0, SEEK_END);
它奏效了,这是一种不好的做法吗?
fseek
与 SEEK_END
的行为未由 C 标准定义。
7.21.9.2/4 The fseek function:
For a text stream, either offset shall be zero, or offset shall be a value returned by an earlier successful call to the ftell function on a stream associated with the same file and whence shall be SEEK_SET.
即便如此,在 stdin
上使用 fseek 也是不可靠的。 POSIX 表示 没有支持文件(管道、套接字等)的流 不可搜索。
但在我看来,您正在尝试“错误”的解决方案:不要混合使用 fgets
和 scanf
。
scanf
对于用户输入和正确的 error handling of scanf
is hard 来说是脆弱的。您可能只使用 fgets
来读取行并使用 sscanf
来提取输入。
我想混合使用 fgets
和 scanf
,但是有 '\n'
个字符的剩余部分,它们弄乱了 fgets
输出,我试过了使用:
fseek(stdin, 0, SEEK_END);
它奏效了,这是一种不好的做法吗?
fseek
与 SEEK_END
的行为未由 C 标准定义。
7.21.9.2/4 The fseek function:
For a text stream, either offset shall be zero, or offset shall be a value returned by an earlier successful call to the ftell function on a stream associated with the same file and whence shall be SEEK_SET.
即便如此,在 stdin
上使用 fseek 也是不可靠的。 POSIX 表示 没有支持文件(管道、套接字等)的流 不可搜索。
但在我看来,您正在尝试“错误”的解决方案:不要混合使用 fgets
和 scanf
。
scanf
对于用户输入和正确的 error handling of scanf
is hard 来说是脆弱的。您可能只使用 fgets
来读取行并使用 sscanf
来提取输入。