C 我做错了什么?程序不停地循环

C 我做错了什么?程序不停地循环,c,clock,fibonacci,C,Clock,Fibonacci,这是一个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 = c

这是一个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;
} 
#包括
#包括
#包括
int main()
{
int j=1,fib,n,i=1,k=0;
智力选择;
浮动x,y,z;
x=时钟();//开始时钟
printf(“输入所需的fib编号:”;
scanf($d,&n);
而(k
scanf($d“,&n);
需要是
scanf(%d“,&n);
。很有可能,当程序启动时,
n
得到的任何随机值都会使循环条件失败

正如@dasblinkenlight在评论中提到的,如果您想要一个有用的度量,您应该在用户输入之后启动时钟

此外,尽管大多数书籍似乎都没有涵盖它,但检查
scanf()
的返回值是一个好主意,因为它可以捕捉到上面的打字错误(谢谢@williampersell)。类似于以下内容的操作会起作用:

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

成功时,函数返回参数的项数 列表已成功填充。此计数可以匹配预期的 由于匹配失败,项或值可能小于(甚至为零),读数 错误,或到达文件末尾

如果在读取时发生读取错误或到达文件末尾 读数时,设置正确的指示器(feofferror)。如果 在成功读取任何数据之前发生,将返回
EOF

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

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

正如@dasblinkenlight在评论中提到的,如果您想要一个有用的度量,您应该在用户输入之后启动时钟

此外,尽管大多数书籍似乎都没有涵盖它,但检查
scanf()
的返回值是一个好主意,因为它可以捕捉到上面的打字错误(谢谢@williampersell)。类似于以下内容的操作会起作用:

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

成功时,函数返回参数的项数 列表已成功填充。此计数可以匹配预期的 由于匹配失败,项或值可能小于(甚至为零),读数 错误,或到达文件末尾

如果在读取时发生读取错误或到达文件末尾 读数时,设置正确的指示器(feofferror)。如果 在成功读取任何数据之前发生,将返回
EOF

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


请,请,请学习正确缩进您的代码(不仅在这里,而且在您的实际源代码中也是如此)。制表符和空格是免费的,并且使代码更易于阅读和维护。学习使用调试器也可能是一项有用的技能。:-)此外,作为一个参考:您开始调用
clock()
应位于
scanf()之后
,或者您将等待输入的时间包含在计时中。我敢打赌,时钟分辨率不会让您看到哪怕是一个刻度的差别:32位整数溢出只需要47次迭代,64位长度溢出只需要90次迭代左右。使用Linux时很难正确缩进。我只是一个C代码初学者r(不到一个月)。对此很抱歉。我已将时钟从输入后开始更改,并修复了scanf上的打字错误%d,从而修复了循环。现在我需要一些时钟输入,因为它保持在0.00000000,还是应该像迭代fib那样?请,请,请,请学习正确缩进代码(不仅在这里,而且在您的实际源代码中也是如此)。制表符和空格是免费的,并且使代码更易于阅读和维护。学习使用调试器也可能是一项很有用的技能。:-)另外,作为参考:您对
clock()
的起始调用应该在
scanf()之后
,或者您将等待输入的时间包含在计时中。我敢打赌,时钟分辨率不会让您看到哪怕是一个刻度的差别:32位整数溢出只需要47次迭代,64位长度溢出只需要90次迭代左右。使用Linux时很难正确缩进。我只是一个C代码初学者r(不到一个月)。很抱歉。我已将时钟从输入后开始更改为,并修复了scanf上的打字错误%d,从而修复了循环。现在我需要对时钟进行一些输入,因为它保持在0.00000000,还是应该像迭代fib那样?+1还请注意,在用户输入之前启动时钟是获得随机结果的可靠方法:)@dasblinkenlight这当然是个问题!还提到检查scanf的返回值:
如果(scanf(“任意随机和不正确的格式字符串”,&n)!=1){/*exit with error message*/;}
会发现问题谢谢!让它工作了:)但时钟似乎不工作>if(scanf(“任意随机和不正确的格式字符串”,&n)!=1){/*退出并显示错误消息*/;}将捕获问题谢谢!让它工作:)但时钟似乎不工作><我将x=clock()放在scanf(“%d”,&n)之后。循环开始了