由于您没有从流中读取,它似乎更加灵活。 这两个提到,既然你可以很容易地改变读取的时间/代码位置,那么你可以用一个c流(我错了,你可以使字符串,等流到c FILE *
流)?是否有任何理由通过fgets + sscanf使用scanf或fscanf
另外,我不知道我只是觉得有点奇怪scanf
。任何优点/缺点scanf
将不胜感激。
编辑:我的意思是使用scanf或的fscanf的VS与fgets + sscanf的
由于您没有从流中读取,它似乎更加灵活。 这两个提到,既然你可以很容易地改变读取的时间/代码位置,那么你可以用一个c流(我错了,你可以使字符串,等流到c FILE *
流)?是否有任何理由通过fgets + sscanf使用scanf或fscanf
另外,我不知道我只是觉得有点奇怪scanf
。任何优点/缺点scanf
将不胜感激。
编辑:我的意思是使用scanf或的fscanf的VS与fgets + sscanf的
这在C FAQ中得到很好的解决。
为什么大家都说不要使用 scanf?我应该用什么来代替?
如果从一个值得信赖的文件(不stdin
)读书,有一个在使用fgets + sscanf
代替fscanf
没有意义的。确实使用scanf
(从stdin
读取)是有问题的。
如果你期待一个integer
的组合,但你读floating point
或其他一些不兼容的类型,你可以检查scanf
返回值。如果它返回零,那么你没有阅读integer
- 但与fgets
你不能这样做。此外,通过检查scanf
的返回值,您可以看到读取的项目数量。
虽然你可以用sscanf做到这一点。 –
您也可以尝试尝试从错误的字符串中读取其他不同类型/简单模式的次数。我不认为有一个简单的方法来做到这一点与scanf。 –
@Roman A. Taycher:那是关于'scanf' over'fgets' – lovesh