scanf("%d", p->age);
时间: 2023-06-17 16:02:48 浏览: 123
这行代码有问题,应该改为`scanf("%d", &(p->age));`。
因为`scanf`函数需要传入参数的地址,以便将读取的值存储到该地址中。而`p->age`表示的是结构体指针`p`所指向的结构体中的`age`成员变量,所以需要在`&`符号后面加上括号,即`&(p->age)`,来获取该成员变量的地址。
相关问题
void add_student(stu *head)//添加新的学生信息 注册 { int a,b; printf("请输入要添加学生信息的个数:"); scanf("%d",&a); for(b=1;a>0;a--,b++) { stu *p1; p1=(stu*) malloc(sizeof(stu)); printf("请输入第%d个学号:\n",b);scanf("%d",&p1->id); stu *p=head->next; while(p!=NULL) { if(p->id==p1->id) { printf("学号重复!请重新输入!\n"); scanf("%d",&p1->id); p=head; } p=p->next; } printf("请输入第%d个名字:\n",b);scanf("%s",p1->name); printf("请输入第%d个性别:\n",b);scanf("%s",p1->gender); printf("请输入第%d个年龄:\n",b);scanf("%d",&p1->age); if(p1->age<0&&p1->age>120) { printf("年龄输入错误!请重新输入!\n"); printf("请输入第%d个年龄:\n",b);scanf("%d",&p1->age); } printf("请输入第%d个贯籍:\n",b);scanf("%s",p1->native_place); printf("请输入第%d个系别:\n",b);scanf("%s",p1->department); printf("请输入第%d个专业:\n",b);scanf("%s",p1->specialty); printf("请输入第%d个班级:\n",b);scanf("%d",&p1->cla); printf("请输入第%d个籍贯变化:\n",b);scanf("%s",p1->xjbh); p1->next=head->next; head->next=p1; system("cls"); printf("新的学生信息注册完成!\n\n"); } }这段代码哪里错了
这段代码可能有以下问题:
1. 在循环中,每次创建一个新的学生节点,但是没有将其添加到链表中。你需要在循环结束之前将新的节点添加到链表中。
2. 在判断年龄是否输入错误时,判断条件写反了,应该是 if(p1->age<0||p1->age>120)。
3. 在学号重复判断的while循环中,如果学号重复,应该结束当前循环,而不是将p指针重新指向head。可以使用break语句来实现。
下面是修改后的代码:
```c
void add_student(stu *head) {
int count;
printf("请输入要添加学生信息的个数:");
scanf("%d", &count);
for (int i = 0; i < count; i++) {
stu *p1 = (stu *)malloc(sizeof(stu));
printf("请输入第%d个学号:", i+1);
scanf("%d", &p1->id);
stu *p = head->next;
while (p != NULL) {
if (p->id == p1->id) {
printf("学号重复!请重新输入!\n");
scanf("%d", &p1->id);
p = head;
break;
}
p = p->next;
}
printf("请输入第%d个名字:", i+1);
scanf("%s", p1->name);
printf("请输入第%d个性别:", i+1);
scanf("%s", p1->gender);
printf("请输入第%d个年龄:", i+1);
scanf("%d", &p1->age);
if (p1->age < 0 || p1->age > 120) {
printf("年龄输入错误!请重新输入!\n");
scanf("%d", &p1->age);
}
printf("请输入第%d个贯籍:", i+1);
scanf("%s", p1->native_place);
printf("请输入第%d个系别:", i+1);
scanf("%s", p1->department);
printf("请输入第%d个专业:", i+1);
scanf("%s", p1->specialty);
printf("请输入第%d个班级:", i+1);
scanf("%d", &p1->cla);
printf("请输入第%d个籍贯变化:", i+1);
scanf("%s", p1->xjbh);
p1->next = head->next;
head->next = p1;
system("cls");
printf("新的学生信息注册完成!\n\n");
}
}
```
{ char c[20];int d=0; printf("请输入姓名:\n"); scanf("%s",c); stu *p=head->next; while(p!=NULL) { if(strcmp(p->name,c)==0) { printf("该学生信息已找到!\n"); printf("学号:%d,名字:%s,性别:%s,年龄:%d,籍贯:%s,系别:%s,专业:%s,班级:%d,学籍变化:%s\n", p->id,p->name,p->gender,p->age,p->native_place,p->department,p->specialty,p->cla,p->xjbh); d=d+1; } p=p->next; } if(d=0) { printf("\n该学生信息不存在!\n"); } }这段代码哪里错了
在判断是否存在该学生信息时,应该使用`if(d==0)`而不是`if(d=0)`,因为`=`是赋值操作符,而`==`才是判断相等的操作符。因此,正确的代码应该是:
```
char c[20];
int d = 0;
printf("请输入姓名:\n");
scanf("%s", c);
stu *p = head->next;
while (p != NULL) {
if (strcmp(p->name, c) == 0) {
printf("该学生信息已找到!\n");
printf("学号:%d,名字:%s,性别:%s,年龄:%d,籍贯:%s,系别:%s,专业:%s,班级:%d,学籍变化:%s\n",
p->id, p->name, p->gender, p->age, p->native_place, p->department, p->specialty, p->cla, p->xjbh);
d = d + 1;
}
p = p->next;
}
if (d == 0) {
printf("\n该学生信息不存在!\n");
}
```
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)