快捷搜索: 王者荣耀 脱发

结构体作为函数参数时出现的的低级错误

写作业时,编译器出现这个报错: 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也就是参数并非所要的指针,把中括号去掉即可

经验分享 程序员 微信小程序 职场和发展