#include<stdio.h> #include<string.h> typedef struct student { char xuehao[9]; char name[11]; char phone[12]; char email[21]; }STU; int main() { int m,n; scanf("%d",&m); STU stu[m]; for(int i=1;i<=m;i++) { scanf("%s %s %s %s",stu[i].xuehao,stu[i].name,stu[i].phone,stu[i].email); } scanf("%d",&n); for(int j=1;j<=n;j++) { char key[21]; int op=0; STU stu[m]; int found=0; scanf("%d",&op); switch(op) { case 1: scanf("%s",key); for(int k=1;k<=m;k++) { if(strcmp(stu[k].xuehao,key) ==0) { printf("%d\n",k); found=1; } } case 2: scanf("%s",key); for(int k=1;k<=m;k++) { if(strcmp(stu[k].xuehao,key) ==0) { printf("%d\n",k); found=1; } } case 3: scanf("%s",key); for(int k=1;k<=m;k++) { if(strcmp(stu[k].xuehao,key) ==0) { printf("%d\n",k); found=1; } } if(found == 0) { printf("Not Found\n"); } } } }
时间: 2024-02-10 08:16:00 浏览: 55
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码有一些问题。
首先,在定义结构体数组 `STU stu[m]` 时,`m` 是一个变量,需要使用动态内存分配。可以使用 `malloc()` 函数来实现:
```
STU *stu = (STU*) malloc(m * sizeof(STU));
```
其次,在 `case` 语句中,虽然分别对应不同的操作,但是三个 `case` 语句的内容都是一样的,这是错误的。应该分别对应不同的操作,例如:
```
case 1:
scanf("%s",key);
for(int k=0;k<m;k++)
{
if(strcmp(stu[k].xuehao,key) ==0)
{
printf("%d\n",k+1);
found=1;
break;
}
}
if(found == 0)
{
printf("Not Found\n");
}
break;
case 2:
scanf("%s",key);
for(int k=0;k<m;k++)
{
if(strcmp(stu[k].name,key) ==0)
{
printf("%d\n",k+1);
found=1;
break;
}
}
if(found == 0)
{
printf("Not Found\n");
}
break;
case 3:
scanf("%s",key);
for(int k=0;k<m;k++)
{
if(strcmp(stu[k].phone,key) ==0)
{
printf("%d\n",k+1);
found=1;
break;
}
}
if(found == 0)
{
printf("Not Found\n");
}
break;
```
最后,在循环中,每次输入一个操作后,又重新定义了一个 `STU stu[m]`,这样会使之前输入的信息全部丢失。应该将 `STU stu[m]` 的定义放在循环外面,而每次进行查找操作时,只需要使用之前输入的信息即可。
阅读全文