将 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

我想混合使用 fgetsscanf,但是有 '\n' 个字符的剩余部分,它们弄乱了 fgets 输出,我试过了使用:

fseek(stdin, 0, SEEK_END);

它奏效了,这是一种不好的做法吗?

fseekSEEK_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 表示 没有支持文件(管道、套接字等)的流 不可搜索。

但在我看来,您正在尝试“错误”的解决方案:不要混合使用 fgetsscanf

scanf 对于用户输入和正确的 error handling of scanf is hard 来说是脆弱的。您可能只使用 fgets 来读取行并使用 sscanf 来提取输入。