我正在尝试使用 time.h 为我的程序计时。代码如下所示,我正在使用
gcc
进行编译。
我的问题是,当我尝试运行此代码(我使用的是 Visual Studio Code)时,
start
和 end
的时间大致相同,并且 solutionFound
由于某种原因非常大(大了几个数量级)比 end
,偶尔为负)。显然这些时间不对,但我不知道为什么或如何解决它。
main.c
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main()
{
// some input/output using printf() and scanf() to get user options
int maxLength; scanf("%d", &maxLength);
clock_t start, solutionFound, end;
long double timeToFindSolution, timeToRun;
start = clock();
for (int i = 1; i < maxLength; i++;)
{
// work...
if(match()) solutionFound = clock(); // match() defined elsewhere in file
}
end = clock();
timeToFindSolution = ((long double) (solutionFound - start)) / CLOCKS_PER_SEC;
timeToRun = ((long double) (end - start)) / CLOCKS_PER_SEC;
printf("solution found in %Lf, took %Lf to run\n", timeToFindSolution, timeToRun);
printf("start = %f, foundPswd = %f, end = %f\n", (double)start, (double)solutionFound, (double)end);
return 0;
}
我尝试将
end = clock()
放入我的循环中,但这没有效果。我在 Stack Overflow 上发现了很多关于如何为程序计时的问题,但没有看到任何人有类似的问题。
我还尝试制作
timeToFindSolution
和 timeToRun
双精度而不是长双精度(无论如何都不期望程序运行很长时间),仍然遇到同样的问题。
好吧,如果我们考虑你的代码的这一部分:
for (int i = 1; i < maxLength; i++;)
{
// work...
if(match()) solutionFound = clock(); // match() defined elsewhere in file
}
您并不总是保证会找到匹配项,因此变量
solutionFound
将包含不应该存在的垃圾数据(以防找到匹配项)。
我建议您将其初始化为零,并在没有匹配项时更新处理案例的方式。