Typedef结构并传递给函数

时间:2015-09-25 21:30:38

标签: c arrays struct

我正在尝试声明一个typedef结构数组,然后将其传递给一个函数,但我收到错误,因为我不确定正确的语法,非常感谢帮助。这是我的代码:

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

#define MAX_COURSES 50

typedef struct courses      //creating struct for course info
{
    int Course_Count;
    int Course_ID;
    char Course_Name[40];
}course;    

void Add_Course(course , int *);

int main()
{
    course cors[MAX_COURSES];
    int cors_count = 0;

    Add_Course(cors, &cors_count);
    return 0;
}

void Add_Course(course cors, int *cors_count)
{
    printf("Enter a Course ID: ");  //prompting for info
    scanf("%d%*c", cors.Course_ID);
    printf("Enter the name of the Course: ");
    scanf("%s%*c", cors.Course_Name);

    cors_count++;   //adding to count

    printf("%p\n", cors_count);
    return;
}

我得到的错误是:

  

错误:“Add_Course”

的参数1的类型不兼容      

test2.c:28:6:注意:预期'course'但参数类型为'struct   当然*'

     

test2.c:在函数“Add_Course”中:

     

test2.c:81:2:警告:格式'%d'需要'int *'类型的参数,   但是参数2的类型为'int'[-Wformat]

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

您正在将数组传递给期望struct course实例的函数,请尝试这样

Add_Course(cors[cors_count], &cors_count);

但是它只会在Add_Course中进行修改,因此您需要

void Add_Course(course *cors, int *cors_count)
{
    printf("Enter a Course ID: ");
    /* this was wrong, pass the address of `Course_ID' */
    scanf("%d%*c", &cors->Course_ID);
    /* Also, check the return value from `scanf' */
    printf("Enter the name of the Course: ");
    scanf("%s%*c", cors->Course_Name);

    /* You need to dereference the pointer here */
    (*cors_count)++; /* it was only incrementing the pointer */

    return;
}

现在你可以

for (int index = 0 ; index < MAX_COURSES ; ++index)
    Add_Course(&cors[index], &cors_count);

虽然cors_count在这种情况下等于MAX_COURSES - 1,但它毕竟很有用。

答案 1 :(得分:0)

Add_Course()函数中,第一个参数的类型为course,但您传递的是course类型的数组,它们不相同。如果要传递数组,则需要指向course的指针作为第一个参数。

接下来,scanf("%d%*c", cors.Course_ID);也是错误的,scanf()期望格式说明符的参数作为指向变量的指针。您需要提供变量的地址。另外,printf("%p\n", cors_count);显然应该是printf("%d\n", *cors_count);

那就是说,cors_count++;可能不是你想要的。您想增加,而不是指针本身。