user-0 提问: 查询问题，一种函数总是查询到最后一个，另一种看起来没问题，但结果显示不出来

回复:
user: user-1
content: strcmp 如果两字符串相等返回的是0  其次： scanf("%s",&no); scanf("%s",&name); 都把&去掉，虽然他们值是一样的，但表示的类型是不同的

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-3
content: #if 0 #include "stdio.h" #include "string.h" #include "stdlib.h" #endif #include <stdio.h> #include <stdlib.h> #include <string.h>  #define N 7 #define MAX_STU_NUM 7  struct student {     char name[20];  //姓名     char no[10];    //学号     int math;       //数学分数     int english;    //英语分数     int computer;   //计算机分数     int score;      //交换用分数     int eveave;     //个人平均分 }; struct student st[N];         //定义学生结构体 void subject(struct student st[],int n)//选定某个学科进行分析 {      int number;     int temp;     printf("        请选择要分析的学科: ");     scanf("%d", &number);     int i=0;     switch(number)     {         case 1:             printf("     以下是关于数学的成绩分析：\n");             for(i=0;i<n;i++)                 st[i].score=st[i].math;             break;         case 2:             printf("       以下是关于英语的成绩分析：\n");             for(i=0;i<n;i++)                 st[i].score=st[i].english;              break;         case 3:             printf("      以下是关于计算机成绩分析：\n");             for(i=0;i<n;i++)                 st[i].score=st[i].computer;             break;     }     int j;     printf("        按学号每个人的原始数据为:\n");     for(i=0;i<n;i++)         printf("        %d\n",st[i].score);     printf("        排序后的数据为\n");     for(i=0;i<n-1;i++)     {          for(j=0;j<n-i;j++)             if(st[j+1].score<st[j].score)             {                 temp=st[j].score;                 st[j].score=st[j+1].score;                 st[j+1].score=temp;             }     }     for(i=0;i<n;i++)         printf("        %d\n",st[i].score);     printf("        该门课的平均成绩为：\n");     float sum=0;     float courseave;     for(i=0;i<n;i++)     {         sum=sum+st[i].score;     }     courseave=sum/7;     printf("        %f\n",courseave);     printf("        该门课的最高分为：\n");     int max=st[0].score;     for(i=0;i<n;i++)     {         if(st[i].score>max)         {             max=st[i].score;         }     }     printf("        %d\n",max);//最高分     printf("        该门课的最低分为：\n");     int min=st[0].score;     for(i=0;i<n;i++)     {         if(st[i].score<min)         {             min=st[i].score;         }     }     printf("        %d\n",min);//最低分     int bjg=0;     int jg=0;     int zd=0;     int lh=0;     int yx=0;     for(i=0;i<n;i++)     {         if(st[i].score<60)    //计算不及格人数         {             bjg++;         }         if(st[i].score>=60&&st[i].score<70)//计算60~69人数         {             jg++;         }         if(st[i].score>=70&&st[i].score<80)//计算70~79人数         {             zd++;         }         if(st[i].score>=80&&st[i].score<90)//计算80~89人数         {             lh++;         }         if(st[i].score>=90)//计算90分以上人数         {             yx++;         }     }     printf("该门课的不及格人数为：\n %d\n60~69人数：\n%d\n70~79人数：\n%d\n80~89人数：\n %d\n90分以上人数：\n%d\n",bjg,jg,zd,lh,yx);    } void studentave(struct student st[],int n)//计算每个人的平均成绩并排序 {     int i, j;     int temp;     for(i = 0; i < n; i++) {         st[i].eveave=(st[i].math+st[i].english+st[i].computer)/4;     }     printf("        每个人平均成绩为：\n");     for(i=0;i<n;i++)         printf("        %d\n",st[i].eveave);      for(i = 0; i < n-1; i++)     {         for(j = 0; j < n-1-i; j++)             if(st[j].eveave > st[j+1].eveave)             {                 temp=st[j].eveave;                 st[j].eveave=st[j+1].eveave;                 st[j+1].eveave=temp;             }     }     printf("        平均成绩排序为：\n");     for(i=0;i<n;i++)         printf("        %d\n",st[i].eveave); }  void nosearch(struct student st[],int n)//按学号查找学生的各门成绩 {     int i=0;     n=7;     char no[10];     printf("        请输入要查找的学生号:");     scanf("%s",no);     while(strcmp(no,st[i].no)==0&&i<n)         i++;     if(i==n)     {         printf("        meizhaodao\n");     }     else         printf("        %s\t%s\t%d\t%d\t%d\n",st[i].no,st[i].name,st[i].math,st[i].english,st[i].computer); } void namesearch(struct student st[],int n)//按姓名查找学生的各门成绩 {     int i=0;     n=7;     char name[20];     printf("        请输入要查找的姓名:");     scanf("%s", name);     while(strcmp(name,st[i].name)==0&&i<7)         i++;     if(i==n)     {         printf("        meizhaodao\n");     }     else         printf("        %s\t%s\t%d\t%d\t%d\n",st[i].no,st[i].name,st[i].math,st[i].english,st[i].computer); } void cunchu(struct student st[],int n)    //存盘 {     int i;     FILE *fp;     fp=fopen("C:\\RJ\\input.dat","wb");//以"写"方式打开一个二进制文件     if(fp==NULL)     {         printf("Can't open!\n");         exit(0);     }      for(i=0;i<n;i++)     {         fwrite(&st[i],sizeof(struct student),1,fp);//一次写入一个学生的成绩     }     fclose(fp); } void duqu(struct student st[],int n)      //读取数据 {     int i;     FILE *fp;     fp=fopen("C:\\RJ\\input.dat","rb");//以"读"方式打开一个二进制文件     if(fp==NULL)     {         printf("Can't open!\n");         exit(0);     }     for(i=0;i<7;i++)     {         fread(&st[0],sizeof(struct student),1,fp);//一次读取一个学生的成绩         printf("                  %s\t%s\t%d\t%d\t%d\n",st[i].no,st[i].name,st[i].math,st[i].english,st[i].computer);     }     fclose(fp); }  int main(int argc, const char *argv[]) {     struct student st[7]={  {"01","王芳",78,77,90},         {"02","张强",89,67,88},         {"03","李浩",56,66,78},         {"04","黄鹏",89,86,85},         {"05","尚校",67,88,76},         {"06","赵鹏",45,54,67},         {"07","蒋泽",78,76,70}};     printf(" 本题的实验数据为数据：\n");     cunchu(st,7);//存盘input.dat     duqu(st,7);//读取数据     printf("  对各科的成绩分析如下：\n");     printf("        本实验采取switch()语句，分别1~3中的表示不同的学科\n        输入1表示计算关于数学方面的成绩；\n        输入2表示计算关于英语方面的成绩；\n        输入3表示计算关于计算机方面的成绩；\n");     subject(st,7);//按各科成绩排序     subject(st,7);//按各科成绩排序     subject(st,7);//按各科成绩排序     printf("   关于个人平均成绩分析：\n");     studentave(st,7);//计算每个人的平均成绩并排序     printf("   按照不同条件查询分析：\n");     nosearch(st,7);//按学号查找学生的各门成绩     namesearch(st,7);//按姓名查找学生的各门成绩     return 0; }   试一下这个版本~

user: user-3
content: 怎么也找不到,因为你的初始化和你的结构体对不上好；第一个不是学好,你的数据结构里第一个是name;如果你输入学号,怎么可能和name匹配呢 改成这样,不过里面还有其他问题.  struct student { char no[10];//学号 char name[20];//姓名 int math;//数学分数 int english;//英语分数 int computer;//计算机分数 int score;//交换用分数 int eveave;//个人平均分 };

user: user-3
content: scanf("%s",&no);这句本身就有问题: 改成scanf("%s", no);

user: user-4
content: while(strcmp(no,st[i].no)==0&&i<n) 改成 while (strcmp(no,st[i].no) != 0 && i < n)