调试 C 程序将结构传递给多个函数和递归函数

Posted

技术标签:

【中文标题】调试 C 程序将结构传递给多个函数和递归函数【英文标题】:Debugging C program passing structs to multiple functions and recursive function 【发布时间】:2021-12-12 02:12:53 【问题描述】:

我的任务是调试一个将结构传递给多个函数的 C 程序。一开始有 16 个错误,我对如何修复最后 3 个错误感到困惑(我认为这是同一个错误)。我已经盯着代码看了好几个小时了。我忽略了什么?

使用在线 IDE 和代码块的错误是:

错误:在“&”标记之前需要“;”、“,”或“)” void print_complex(struct complex &a)

感谢任何帮助。

谢谢,

MJG


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

struct complex

    int real;
    int img;
;


void scan_complex(struct complex &a) // function to read in complex number

    printf("Enter a and b where a + ib is the complex number."); //reading input
    
    printf("\na = ");
    scanf("%d", &a.real);
    
    printf("b = ");
    scanf("%d", &a.img);
// end scan function


void print_complex(struct complex &a) //function to print complex number

    printf(" %d + %di", a.real, a.img);
// end print funcion


struct complex * add_complex(struct complex *a,struct complex *b) //method to add two complex number

    struct complex *c = (struct complex *)malloc(sizeof(struct complex));
    
    c->real = a->real + b->real;
    c->img = a->img + b->img;

return c;
// end add function


void multiply_complex(struct complex &a, struct complex &b) //method to multiply two complex numbers



    struct complex c;
    
    c.real = a.real*b.real - a.img*b.img;//multiplying
    c.img = a.img*b.real + a.real*b.img;

        if (c.img >= 0)
        
            printf("Multiplication of the complex numbers = %d + %di", c.real, c.img);
        
        
        else
        
            printf("Multiplication of the complex numbers = %d %di", c.real, c.img);
        
// end multiply function

struct complex* f(int n, struct complex *c) //method to find addition of c , n times


    if(n==0)

        return c;

        return add_complex(c,f(n-1,c));
 // end f fuction



float abs_complex(struct complex c) //to find absolute


    return sqrt(c.real*c.real + c.img *c.img);
 // end absolute value function

int main()



struct complex a;
struct complex b;

scan_complex(a);

scan_complex(b);

printf("absolute of : ");

print_complex(a);

printf("%f\n",abs_complex(a));

printf("\n");

print_complex(a);

printf(" + ");

print_complex(b);

printf(" = ");

struct complex *c =add_complex(&a,&b);

print_complex(*c);

printf("\n");

multiply_complex(a,b);

printf("\n");

struct complex *d = f(3,&a);

print_complex(*d);

printf("\n");


return 0;

// end main

【问题讨论】:

【参考方案1】:

C 中没有引用这样的东西。那是来自C++。所以你不能在函数的参数类型中使用符号&amp;。在 C 中,&amp; 表示“地址”。例如,当您编写scanf("%d", &amp;x) 时,您将x 的地址提供给scanf,以便scanf 可以将其结果存储到x

所以你应该改为将函数声明为void scan_complex(struct complex *a),然后在函数体中,a 不是struct complex 类型的变量,而是struct complex * 类型的变量,你可以读作pointer to struct complex。然后在函数体中,可以使用scanf("%d", &amp;((*a).real);,或者快捷方式scanf("%d", &amp;(a-&gt;real));

【讨论】:

感谢您的帮助。当我进行更改时,我不断收到更多错误。我将重新开始调试过程,从您的修订开始。

以上是关于调试 C 程序将结构传递给多个函数和递归函数的主要内容,如果未能解决你的问题,请参考以下文章

数据结构第九篇——栈与递归

函数和宏定义实验

递归函数

数据结构-- 递归 排序

栈与递归

如何将道具传递给递归子组件并保留所有道具