结构体作为函数参数时出现的的低级错误
写作业时,编译器出现这个报错: expected expression before struct 而且是在,每个调用结构体的地方都出错了。 部分代码如下:
#define NAME_LEN 25 #define MAX_PARTS 100 struct part { int number; char name[NAME_LEN+1]; int on_hand; }; int read_line(char str[], int n); int find_part(int number, const struct part inv[], int np); void insert(struct part inv[], int *np); void search(const struct part inv[], int np); void update(struct part inv[], int np); void print(const struct part inv[], int np); int main(){ char code; int np=0; struct part inv[MAX_PARTS]; for(;;){ printf("Enter the code:"); scanf("%c",&code); while(getchar()!= ); switch (code){ case i: insert(struct part inv[], int *np); break; case s: search(const struct part inv[], int np); break; case u: update(struct part inv[], int np); break; case p: print(const struct part inv[], int np); break; case q: return 0; default: printf("ERROR!"); break; } printf(" "); } }
然后上网查询发现,是因为对结构体的基本定义都没吃透! 在上面的struct part就相当已经建立了一种part的新类型了,结果在调用函数是又一次加上了struct part就重复了,之后改成如下就好了:
int main() { char code; int np = 0; struct part inv[MAX_PARTS]; for (;;) { printf("Enter the code:"); scanf("%c", &code); while (getchar() != ); switch (code) { case i: insert(inv, &np); break; case s: search(inv, np); break; case u: update(inv, np); break; case p: print(inv, np); break; case q: return 0; default: printf("ERROR!"); break; } printf(" "); } }
刚开始改的时候又把*[MAX_PARTS]*给加上了结果编译时报错: expected const struct part*,but argument is of type struct part也就是参数并非所要的指针,把中括号去掉即可