scanf("%d",&a); switch(a) { case 1: printf("要查找的姓名\n"); char name[20]; scanf("%s",name); int index; index=SearchByName(stu, n, name); if(index != -1) { printf("查询结果:\n%s %s %d\n", stu[index].name, stu[index].id, stu[index].room); } else { printf("没有找到该学生\n"); }break; case 2: printf("要查找的学号\n"); char id[15]; scanf("%s",id); int indexa; indexa=SearchByNumber(stu, n, id); if(indexa != -1) { printf("查询结果:\n%s %s %d\n", stu[indexa].name, stu[indexa].id, stu[indexa].room); } else { printf("没有找到该学生\n"); }break; case 3: printf("要查找的房间\n"); int room; scanf("%d",&room); int indexb; indexb=SearchByroom(stu, n, room); if(indexb !=-1) { printf("查询结果:\n%s %s %d\n", stu[indexb].name, stu[indexb].id, stu[indexb].room); } else { printf("没有找到该学生\n"); }break; case 0: b=0; printf("已经退出查询\n"); break; default: printf("输入的类型无效,请重新输入。\n"); break; } } return 0; }查询不了第一个
时间: 2024-03-21 09:38:02 浏览: 18
在这段代码中,无法查询到第一个学生的原因可能是因为在输入要查找的姓名时,输入了多余的空格或回车符。这些字符会被当作字符串的一部分,导致和结构体数组中的字符串不匹配,最终导致查找失败。
解决方法是在读取输入字符串之前先清除输入缓冲区中的多余字符,可以使用 `getchar()` 函数清除缓冲区中的字符。例如:
```
printf("要查找的姓名\n");
char name[20];
scanf("%*[^\n]"); // 清除输入缓冲区中的多余字符
scanf("%*c"); // 将换行符从输入缓冲区中取出
scanf("%s", name);
```
这样就可以避免多余字符对字符串匹配造成的影响,确保可以查询到第一个学生。
相关问题
找出错误并改正 #include<stdio.h> void f(int n){ char result; int k=0; k=(n>=93)+(n>=85)+(n>=80)+(n>=75)+(n>=70)+(n>=65)+(n>=60); switch(k){ case 0:printf("F");break; case 1:printf("D");break; case 2:printf("C");break; case 3:printf("C+");break; case 4:printf("B");break; case 5:printf("B+");break; case 6:printf("A");break; case 7:printf("A+");break; } } int main(){ int N; printf("Name_f Name_l stu_id score retake GPA rank\n"); for(N=0; N<100; N++){ char lname,fname; int n,m,f1,f2; scanf("%c %c", &lname, &fname); scanf("%d %d",&n,&m); f1=n/100000000; if(n<202000000000 || n>202300000000) continue; if(f1==2022) f2=0; else f2=1; printf("%c %c %d %d %d",lname,fname,n,m,f2); f(n); } return 0; }
这段代码没有明显的错误,但可以进行一些改进:
1. 在输入字符时,应该在%c前加上一个空格,以避免吸收之前输入的回车符。
2. 在函数f中,变量result并没有被使用,可以删除。
3. 在函数f中,可以将switch语句中的case合并,如将case 3和case 4合并为一个case,避免重复的代码。
改进后的代码如下:
```
#include<stdio.h>
void f(int n) {
int k = 0;
k = (n >= 93) + (n >= 85) + (n >= 80) + (n >= 75) + (n >= 70) + (n >= 65) + (n >= 60);
switch(k) {
case 0: printf("F"); break;
case 1: printf("D"); break;
case 2: printf("C"); break;
case 3:
case 4: printf("B"); break;
case 5:
case 6: printf("A"); break;
case 7: printf("A+"); break;
}
}
int main() {
int N;
printf("Name_f Name_l stu_id score retake GPA rank\n");
for(N = 0; N < 100; N++) {
char lname, fname;
int n, m, f1, f2;
scanf(" %c %c", &lname, &fname);
scanf("%d %d", &n, &m);
f1 = n / 100000000;
if(n < 202000000000 || n > 202300000000) continue;
if(f1 == 2022) f2 = 0;
else f2 = 1;
printf("%c %c %d %d %d", lname, fname, n, m, f2);
f(n);
}
return 0;
}
```
将以下代码中的goto语句替换:void alter(){ char name[10]; int n;/*确定当前用户的人数*/ int i; printf("\t\t\t请输入您的姓名:"); scanf("%s",name); for(n=0;n<100;n++) if(u[n].monney==0) break; for(i=0;i<n;i++) if(strcmp(u[i].name,name)==0){ int choice=0; printf("\n\t\t\t1.修改ID\n\t\t\t2.修改用水量\n\t\t\t3.退出\n"); printf("\n\t\t\t请输入您的选择:"); GOTO1:scanf("%d",&choice); switch(choice) { case 1: printf("\n\t\t\t请输入修改后的ID:"); scanf("%s",u[i].ID); break; case 2: printf("\n\t\t\t请输入修改后的用水量:"); scanf("%lf",&u[i].water); break; case 3: break; default: printf("\t\t\t输入错误,请重新输入:"); goto GOTO1; } printf("\n修改成功!\n"); break; } if(i==n) printf("\n\t\t\t没有此用户,您可以选择注册新用户^_^!\n"); }
void alter(){
char name[10];
int n; /*确定当前用户的人数*/
int i;
printf("\t\t\t请输入您的姓名:");
scanf("%s", name);
for (n = 0; n < 100; n++)
if (u[n].monney == 0)
break;
for (i = 0; i < n; i++)
if (strcmp(u[i].name, name) == 0) {
int choice = 0;
printf("\n\t\t\t1.修改ID\n\t\t\t2.修改用水量\n\t\t\t3.退出\n");
printf("\n\t\t\t请输入您的选择:");
while (scanf("%d", &choice) != 1 || choice < 1 || choice > 3) {
printf("\t\t\t输入错误,请重新输入:");
while (getchar() != '\n');
}
switch (choice) {
case 1:
printf("\n\t\t\t请输入修改后的ID:");
scanf("%s", u[i].ID);
break;
case 2:
printf("\n\t\t\t请输入修改后的用水量:");
scanf("%lf", &u[i].water);
break;
case 3:
break;
default:
printf("\t\t\t输入错误,请重新输入:");
break;
}
printf("\n修改成功!\n");
break;
}
if (i == n)
printf("\n\t\t\t没有此用户,您可以选择注册新用户^_^!\n");
}