我需要帮助调试基本的C程序来计算斐波纳契数

时间:2018-05-31 20:49:50

标签: c loops infinite-loop fibonacci

#include <stdio.h>
int main(); 
{
    int a;
    int b;
    int c;
    a = 1;
    b = 1;
    c= 2;
    for ()
    {
        a = c + b;
        printf(a,"\n");
        b = c + a;
        printf(b,"\n");
        c = a + b;
        printf(c,"\n");
    }
}

我是C的初学者,我正在尝试编写一个列出Fibonacci序列的程序。

这是我到目前为止所拥有的。我知道我至少有两个问题,一个是for循环。我怎么会把它变成无限循环?

我遇到的第二个问题是此错误消息

"prog.c:3:1: error: expected identifier or '(' before '{' token
 {
 ^"

如果有人可以提供帮助,那将非常感激。

6 个答案:

答案 0 :(得分:0)

;之后移除int main() - 应该处理编译器错误

while(1)代替for() - 将运行无限循环

答案 1 :(得分:0)

这是你可以这样做的一种方式。

#include <stdio.h>
int main()
{
    unsigned int a;
    unsigned int b;
    unsigned int c;
    a = 0;
    b = 0;
    c = 1;
    while(1)
    {
        if (c < b)
            break;
        printf("%u\n",c);
        a = b;
        b = c;
        c = a + b;
    }
}

修改为使用unsigned int并根据注释更改比较。

巴比

答案 2 :(得分:0)

以下是Fibonacci系列的工作代码

#include <stdio.h>
void main()
{
    int a;
    int b;
    int var_z;
    a = 1;
    b = 1;
    for(int i = 0;i < 10;i++)
    {
        printf("%d\n",a);
        printf("%d\n",b);
        a = a+b;
        b = a+b;
    }
}

EG。 https://eval.in/1013468

答案 3 :(得分:0)

/ *斐波那契系列* /

的#include

int main()

{

long int a =0;

 long int b=1;

 long int c=1;

  int n,d=1;


   printf(" Enter the number of 

   terms ");

   scanf("%d",&n);

   do

     {


       printf("%d\n",c);

              c=b+a;

              a=b;

              b=c;

              d=d+1;


       }

            while(n>=d);

             return 0;


  }

答案 4 :(得分:0)

如何阅读此特定编译器错误:

  

prog.c:3:1:错误:预期的标识符或'('''''''{{}

这告诉你错误发生在第3行:

1: #include <stdio.h>
2: int main();
3: {           // <------ compiler is complaining about this line

并且它看到{它不应该在哪里。它应该看到{的唯一时间是在函数声明符(函数名称加参数列表)之后或在标识符之后(对于struct,union或enum定义)。

问题是你不应该在int main之后有分号因为它,编译器将int main()视为声明,而不是函数的开头定义

删除该分号,错误就会消失。

这里的重要教训 - 编译器不会告诉您实际发生错误的位置,但错误阻止它转换代码的位置。如果你有一个深层嵌套的循环,比如

for (...)
{
  for (...)
  {
    for (...)
    {

并且你忘了在最里面的循环中放入右括号,编译器不会说“你忘了在这个最里面的循环上放一个右括号”;相反,它会以某种方式向某条线投诉,或者是因为它已经到达程序的末尾或下一个函数定义而没有看到前一个函数的结束}

  

如何让它成为无限循环?

无限循环的语法是while(1)for(;;)。无论你使用哪种,编译器应该(应该)为两者生成相同的代码。然而,就像其他人所说的那样,Fibonacci数字非常快,非常大,无法表示原生整数数据类型。在计算第50个F数左右后,您将开始看到溢出错误。

答案 5 :(得分:0)

您的代码有一些错误,主要错误后的半冒号,您的算法不输出fib序列和for循环它输入错误。

#include <stdio.h>
int main()  //;<-- doesn't contain semicolon
{
    /* use a better variable name for clarity
    int a; --> a
    int b; --> last number
    int c; --> sum
    a = 1;
    b = 0;
    */
    int a = 1;
    int last = 0;
    int sum;

    for (;;) // infite for loop needs 2 semicolons to work
    {
        printf("fib : %d\n", last);
        sum = a + last;
        last = a;
        a = sum;
    }
}

顺便说一下,你应该限制你的for循环,否则它会溢出你的int变量。 long unsigned a,sum,last会给你更多的存储位。