【问题标题】:polling the number of clock cyclesw in C轮询 C 中的时钟周期数
【发布时间】:2016-10-03 01:03:46
【问题描述】:

我正在尝试不断轮询时钟周期的数量并仅在周期计数为 100 + 开始时间时打印我的语句。这样,如果我的 start = 1000000,则仅当 end = 1000100 时才应执行打印语句 它应该显示例如假设在开始时,时间 = 1000000 你好,start 的值:1000000 和 end 的值: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);
}

【问题讨论】:

    标签: c time clock


    【解决方案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);
    }
    

    【讨论】:

    • 在按照上面的 Hello,start 的值:0 和 end 的值:-1582571616 之后,我现在得到了这个输出。但我不想到 100 岁
    • 我怀疑 clock_t 真的是 64 位类型,long 或其他。更新 printf 语句中的格式说明符。
    【解决方案2】:

    第一个问题就像其他人所说的那样,if条件中的优先级是错误的。第二个是clock_t 不一定可以表示为整数。最好的办法是强制转换为 double,这将在 clock_t 是 64 位整数但值相对较小的常见情况下提供足够的范围。

    【讨论】:

      【解决方案3】:

      while(end=clock()

      不正确,因为= 的优先级低于&lt;

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

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

      ( clock() &lt; ( start + 100 ) ) 是一个布尔表达式,为 1 或 0;你的while 循环运行直到条件错误,这意味着( clock() &lt; ( start + 100 ) ) 为0,然后分配给end

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

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

      【讨论】:

        猜你喜欢
        • 2017-03-12
        • 1970-01-01
        • 2014-11-02
        • 2016-08-10
        • 1970-01-01
        • 2020-06-26
        • 1970-01-01
        • 2019-04-01
        • 2021-01-17
        相关资源
        最近更新 更多