使用一个 scanf() (或 fscanf()) 更好还是没关系?
我听说scanf()“成本很高”,但现在我找不到任何相关信息。因此,fscanf("%f", &num)在一行 ( fscanf("%f %f %f %f", &num, &num1, &num2, &num3)) 中使用一个值还是查找多个值有关系吗?附加问题:您能否推荐一些有关此类信息的来源,这些信息是关于某个功能对程序的成本是多少?
我知道标题中有 scanf(),但是 fscanf()、sscanf() 和 scanf() 可以在手册的同一页上找到,因此我相信标题没有误导性。
回答
它们的性能应该完全相同。
fscanf从打开的文件流中读取;“ ˚F ILE扫描 ˚F ormated”。
scanf做完全相同的事情,但它只从stdin. scanf(format, ...)只是fscanf(stdin, format, ...).
这将取决于您的实施。现实情况是,像这样scanf的函数不太可能是性能问题。它们已经优化了几十年。性能问题来自诸如循环和糟糕的算法之类的东西。查看诸如Big-O Notation 之类的主题以了解基础知识,以及诸如基准测试和分析器之类的工具来测试正在运行的程序。
你应该关注一下是许多问题scanf和fscanf。最大的问题是他们将读取输入与解析输入联系在一起。考虑使用fgetsand sscanf(S for String) 来分隔两者:读取一行,解析一行。
- @Funny 因为它们有不同的错误处理。使用 fscanf 更难知道是否存在读取问题与解析问题。而你***永远***不知道会发生什么。如果您对输入做出假设,则您的程序很容易受到各种攻击和错误的影响。读取和解析是两个复杂的问题;将它们分开。