C 我做错了什么?程序不停地循环
这是一个C程序,使用clock()迭代斐波那契数来计算得到第n个斐波那契数所需的时间。程序不停地循环。我知道这些方程式是正确的,因为我能够在没有时钟功能的情况下正确运行程序。感谢您的帮助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
#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);
而(kscanf($d“,&n);
需要是scanf(%d“,&n);
。很有可能,当程序启动时,n
得到的任何随机值都会使循环条件失败
正如@dasblinkenlight在评论中提到的,如果您想要一个有用的度量,您应该在用户输入之后启动时钟
此外,尽管大多数书籍似乎都没有涵盖它,但检查scanf()
的返回值是一个好主意,因为它可以捕捉到上面的打字错误(谢谢@williampersell)。类似于以下内容的操作会起作用:
if( scanf( "whatever random and incorrect format string", &n ) != 1 ) {
/* exit with error message */
}
发件人:
成功时,函数返回参数的项数
列表已成功填充。此计数可以匹配预期的
由于匹配失败,项或值可能小于(甚至为零),读数
错误,或到达文件末尾
如果在读取时发生读取错误或到达文件末尾
读数时,设置正确的指示器(feof或ferror)。如果
在成功读取任何数据之前发生,将返回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 */
}
发件人:
成功时,函数返回参数的项数
列表已成功填充。此计数可以匹配预期的
由于匹配失败,项或值可能小于(甚至为零),读数
错误,或到达文件末尾
如果在读取时发生读取错误或到达文件末尾
读数时,设置正确的指示器(feof或ferror)。如果
在成功读取任何数据之前发生,将返回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)之后。循环开始了