如何解决将fget与scanf混合并使用fseek跳过换行符会是一个不好的做法吗? C
我想使用fgets
和scanf
混合它们,但是剩下'\n'
个字符,它们弄乱了fgets
的输出,我尝试使用:
fseek(stdin,SEEK_END);
它奏效了,这是不好的做法吗?
解决方法
C标准未定义fseek
与SEEK_END
的行为。
7.21.9.2/4 The fseek function:
对于文本流,offset应该为零,或者offset应该是对与同一文件相关联的流上的ftell函数的较早成功调用返回的值,并且wherece应该为SEEK_SET。
即使不这样,在stdin
上使用fseek也不可靠。 POSIX指出,没有支持文件(管道,套接字等)的 streams 是不可搜索的。
但是我认为您正在尝试“错误的”解决方案:请勿将fgets
和scanf
混在一起使用。
scanf
对于用户输入和适当的error handling of scanf
is hard来说是脆弱的。相反,您可能只使用fgets
来读取行并使用sscanf
来提取输入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。