用C表示轮询时钟周期数

时间:2016-10-03 01:03:46

标签: c time clock

我正在尝试连续轮询勾选的时钟周期数,并仅在循环计数为100 +开始时间时打印我的语句。这样,如果我的start = 1000000,则只应在end = 1000100时执行print语句 它应该表明例如假设在开始时,时间= 1000000 您好,开始值:1000000,结束值:1000101

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main()
{
        clock_t start,end;
        start = clock();
        while(end=clock() < (start + 100))
        {};
        printf("Hello, value of start:%d and value of end:%d", start, end);
}

但是我得到了 你好,start:0的值和end的值:0

我已经编辑了我的代码并获得了end = 0.0000的值。这是我编辑的代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main()
{
        clock_t start;
        start = clock();
        clock_t end = start;
        printf("Hello");
        while(end < (start + 100))
        {
                end = clock();
        };
        printf("value of end is %f \n", end);
}

3 个答案:

答案 0 :(得分:1)

我非常肯定这一行:

while(end=clock()< start + 100)

需要这样:

while( (end=clock()) < (start + 100) )

写得更好:

void main()
{
        clock_t start = clock();
        clock_t end = start;
        while(end < (start + 100))
        {
            end = clock();
        };
        printf("Hello, value of start:%d and value of end:%d", (int)start, (int)end);
}

答案 1 :(得分:1)

  

while(end = clock()&lt; start + 100)

不正确,因为=的优先级低于<

准确地说,您的陈述将被解释为这样(注意优先顺序:+然后<然后=):

while( end = ( clock() < ( start + 100 ) ) )
    ;

( clock() < ( start + 100 ) )是一个布尔表达式,它将是1或0;您的while循环会一直运行,直到条件出错,这意味着( clock() < ( start + 100 ) )为0,然后将其分配给end

所以不要犹豫是否要在表达式中添加额外的括号。在这种情况下,您需要的是:

while( ( end=clock() ) < start + 100)
    ;

答案 2 :(得分:1)

第一个问题是正如其他人所说的那样,if条件的优先顺序是错误的。第二个是clock_t不一定表示为整数。最好的选择是转换为double,这将在clock_t为64位整数但值相对较小的常见情况下提供足够的范围。