Windows 和 Linux 下 clock 函数对 scanf 函数的测量问题
这个问题的来由是《算法竞赛入门经典(第 2 版)》P27:
输入 "20",按 Enter 之后...键盘输入的时间也被计算在内——这确实是程序启动之后才进行的。
所以,作者建议使用 echo
命令来消除键盘输入的影响:
在 Windows 命令行下执行
echo 20|abc
,操作系统会自动把 20 输入,其中 abc 是程序名。Linux 下需要输入echo 20|./abc
,因为在默认情况下,当前目录不在可执行文件的搜索路径中。
根据我的猜测,在 Windows 下使用 clock()
函数,scanf
函数的输入时间是要被算进去的,而在 Linux
环境下,scanf
的时间则会被省去。
下面就来测试一下。
测试程序如下:
在 Windows 下测试如下:
在 Ubuntu 20.04 下测试如下:
由此,可以知道,前面的猜测是正确的。但是具体原因是为什么,这个就需要去看两个操作系统的具体实现了。暂时没有这个必要。
然后,我们使用 echo
命令再试一下:
Windows 和 Linux 下 clock 函数对 scanf 函数的测量问题
http://fanyfull.github.io/2021/11/27/Windows-和-Linux-下-clock-函数对-scanf-函数的测量问题/