我正在尝试声明一个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]
任何帮助将不胜感激
答案 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++;
可能不是你想要的。您想增加值,而不是指针本身。