将fget与scanf混合并使用fseek跳过换行符会是一个不好的做法吗? C

问题描述

我想使用fgetsscanf混合它们,但是剩下'\n'个字符,它们弄乱了fgets输出,我尝试使用:

fseek(stdin,SEEK_END);

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

解决方法

C标准未定义fseekSEEK_END的行为。

7.21.9.2/4 The fseek function

对于文本流,offset应该为零,或者offset应该是对与同一文件相关联的流上的ftell函数的较早成功调用返回的值,并且wherece应该为SEEK_SET。

即使不这样,在stdin上使用fseek也不可靠。 POSIX指出,没有支持文件(管道,套接字等)的 streams 是不可搜索的。

但是我认为您正在尝试“错误的”解决方案:请勿将fgetsscanf混在一起使用。

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