我在这做错了什么?程序循环不停

时间:2013-03-01 02:45:06

标签: c clock fibonacci

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

#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;
} 

1 个答案:

答案 0 :(得分: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

  

成功时,该函数返回参数的项数   列表已成功填写。此计数可以匹配预期的数量   由于匹配失败,读数,项目或更少(甚至为零)   错误,或文件结尾的范围。

     

如果发生读取错误或达到文件结尾   阅读时,设置了正确的指标( feof ferror )。而且,如果有的话   在成功读取任何数据之前发生,返回EOF

     

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