C语言 计时函数时间差总为零

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 计时函数时间差总为零相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<time.h>
void leave_car();
int main()

time_t t_start,t_end;
t_start=time(NULL);
leave_car();
return 0;

void leave_car()

int i,j;
time_t t_start,t_end;
printf("yse:");
scanf("%d",&i);
printf("%d\n",i);
t_end=time(NULL);
printf("time is %f s\n",difftime(t_end,t_start);
printf("yes:");
scanf("%d",&j);
printf("%d",j);

这是我写的简易情况,需要计时函数可以分成两个部分,一部分在主函数,一部分在分函数。但运行时时间总是为零,求解!!!

C语言中变量是有作用域的,除非定义了全局变量,一般而言不同的函数体中的变量相互不可见。

因此,主函数中的t_start与leave_car()函数中的t_start并不是同一个变量!

修改如下:

    将主函数中的

    time_t t_start,t_end;
    t_start=time(NULL);
    两个语句去掉,因为对整个程序而言没有实际的作用。

    在leave_car()中

    printf("yes");

    前添加

    t_start=time(NULL);

    另外

    printf("time is %f s\\n",difftime(t_end,t_start);
    少写了一个反括号

追问

你好,这样的话,如果我在主函数中加入一个while,switch语句,能否保证我在执行leave_car()函数以外的其它函数时,也在进行计时吗?

追答

time()是从硬件中读取当前时间的,这个时间值只与硬件有关,所以只要两次读取的时间的变量是可见的,那么其差值一定是两次调用的时间间隔。

追问

你好,能简单写一下程序吗,变量可见是什么意思?

追答

比如:

int i;
i=5;
int b;
b=6;
b=b+i;
printf("%d,%d",i,b);

这里i和b就是可见的,其意思就是能够在一起使用和运算。
而以下两段代码:
int a=2;
a++;


int b;
b=15;
//以下代码是非法的
b+=a; //在此编译不能通过,因为对这段代码来说变量a没有定义,是不可见的。

参考技术A 迎接柔和的光辉。厅丌有的 参考技术B 你要是运行时间不到一秒呢? 参考技术C 把 time_t t_start,t_end; 改为全局量。去掉 2个函数里的声明time_t t_start,t_end;

#include<stdio.h>
#include<time.h>
time_t t_start,t_end; //global
void leave_car();

int main()
t_start=time(NULL); // 开始时间
leave_car();
return 0;


void leave_car()
int i,j;
//time_t t_start,t_end;
printf("yse:");
scanf("%d",&i);
printf("%d\n",i);
t_end=time(NULL); //结束时间
printf("time is %f s\n", difftime(t_end,t_start) ); // 加上小括号
printf("yes:");
scanf("%d",&j);
printf("%d",j);
追问

你好,这样会显示时间,但是数值很大,13456062349.0000000s 这种,求解!!

追答

计算时间差以前,你有输入语句 scanf("%d",&i); 输出语句 printf("%d\n",i); 你不至于等了那么长时间吧。

本回答被提问者采纳

以上是关于C语言 计时函数时间差总为零的主要内容,如果未能解决你的问题,请参考以下文章

c语言如何计时

C语言中有没有一种计时函数,能算出从程序中某段代码运行所花的时间?

在C语言中如何实现精确计时

怎样计算程序的执行时间(C语言中)?

谁能帮我用C语言写一个测试选择排序性能(函数的运行时间)的程序,不胜感激!

解决办法一:GetProcAddress函数返回值总为NULL