1

这是一个具有迭代斐波那契的 C 程序,使用 clock() 来计算获得第 n 个斐波那契数所需要的时间。程序不停地循环。我知道方程式是正确的,因为我能够在没有时钟功能的情况下正确运行程序。任何帮助表示赞赏!

#include<time.h>
#include<sys/file.h>
#include<stdio.h>

int main ( )
{
  int j=1, fib, n, i=1, k=0;
  int choice;
  float x,y,z;

  x = clock(); //start clock

  printf("input the fib number you want: ");
  scanf("$d", &n);

  while (k <=n)
  {
    fib = i + j;
    i = j;
    j = fib;
    ++k;

    printf( "The fib number is %d\n ", fib);
  }

  y =clock(); // end clock
  z = (y - x) / CLOCKS_PER_SEC;

  printf("\n\nThe execution time was: %.15f", z);
  return 0;
} 
4

1 回答 1

5

scanf("$d", &n);需要scanf("%d", &n);。很有可能,程序启动时获得的任何随机值n都会使循环条件失败。

正如@dasblinkenlight 在评论中提到的那样,如果您想要一个有用的测量值,您应该在用户输入后开始计时。

此外,虽然大多数书籍似乎没有涵盖它,但检查返回值scanf()是一个好主意,因为它可以捕获像您上面这样的拼写错误(感谢@WilliamPursell)。像下面这样的东西会起作用:

if( scanf( "whatever random and incorrect format string", &n ) != 1 ) {
  /* exit with error message */
}

来自cplusplus.com

成功时,该函数返回参数列表中成功填充的项目数。由于匹配失败、读取错误或到达文件末尾,此计数可以与预期的项目数匹配或更少(甚至为零) 。

如果发生读取错误或读取时到达文件结尾,则设置正确的指示符(feofferror)。并且,如果在任何数据可以成功读取之前发生任何一种情况,EOF则返回。

如果在解释宽字符时发生编码错误,该函数将errno 设置EILSEQ

于 2013-03-01T02:47:05.250 回答