user-0 提问: 来大神帮忙看下，所有的输出都显示不出结果

回复:
user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。

user: user-2
content: input函数中的scanf不正确。 1楼和4楼的方法可采纳。

user: user-3
content: #include<stdio.h> #include<string.h> #include<stdlib.h>  int SIZE; struct student                                    //声明结构体类型struct student {     int num;     char name[10];     char time[12];     float score[4];  };  void search(struct student stu[]); void input(struct student stu[]); void correct(struct student stu[]); void all(struct student stu[]);  int main()                                    //定义主函数 {     struct student stu[10];                 //定义结构体数组     int n;     int flag=1;     printf("请输入学生人数(must less equal 10)：\n");     scanf("%d",&SIZE);       while(1)                                 //当为真时，进行以下循环     {         printf("*******************************\n");         printf("学生成绩系统\n");         printf("1.输入学生信息\n");         printf("2.查找学生信息\n");         printf("3.修改学生信息\n");         printf("4.显示所有学生信息\n");         printf("5.各优秀率\n");         printf("6.退出\n");         printf("*******************************\n");         scanf("%d", &n);         switch(n)                                //用该语句实现分支选择结构         {             case 1:input(stu);  break;             case 2:search(stu);  break;             case 3:correct(stu);   break;             case 4:all(stu);    break;              case 6:flag=0;          }          system("pause");         system("cls");     }   }  void input(struct student stu[]) {     int i=0;     system("cls");     printf("输入学生信息:\n学号    姓名 入学日期    4门成绩\n");     for(i = 0;i<SIZE;i++)     {         scanf("%d %s %s %f %f %f %f", &stu[i].num, stu[i].name,               stu[i].time,&stu[i].score[0],               &stu[i].score[1],&stu[i].score[2],               &stu[i].score[3]);     } }   void search(struct student stu[])                        //子函数，定义search函数 {     int n=0,no=20,i;     char name[20];     printf("请输入查询的类型：\n");     printf("1.根据学号查询\n");     printf("2.根据姓名查询\n");     scanf("%d",&n);                                     //通过输入不同的数字进行2种选择     if(n==1)                                            //根据学号进行查询     {         printf("请输入学号\n");         scanf("%d",&no);         printf("学号    姓名 入学日期    4门成绩\n");         for( i=0;i<SIZE;i++)         {             if(stu[i].num == no)  {                 printf("%d   %s    %s   %4.2f %4.2f %4.2f %4.2f\n",                     stu[i].num,stu[i].name,stu[i].time,                     stu[i].score[0],stu[i].score[1],                     stu[i].score[2],stu[i].score[3]);                 break;             }         }         if (i >= SIZE)                 printf("查无此人\n");     }     if(n==2)     {         printf("请输入姓名\n");         scanf("%s",name);         if(strlen(name)>10)             printf("输入的名字过长\n");         else             printf("学号    姓名 入学日期    4门成绩\n");         for(i=0; i< SIZE;i++) {             if(strcmp(stu[i].name, name) == 0)  {                 printf("%d   %s    %s  %4.2f %4.2f %4.2f %4.2f\n",                     stu[i].num,stu[i].name,stu[i].time,                     stu[i].score[0],stu[i].score[1],                     stu[i].score[2],stu[i].score[3]);                 break;             }         }         if (i >= SIZE)                 printf("查无此人\n");     } }   void correct(struct student stu[]) {     int i,num0,num1;     float fnum;     printf("请输入修改学生的学号:\n");     scanf("%d", &num0);     for(i = 0; i < SIZE;i++)         if (num0 == stu[i].num) {             printf("请输入要修改第几门课的成绩:\n");             scanf("%d",&num1);             printf("请输入修改的成绩:\n");             scanf("%f", &fnum);             stu[i].score[num1-1] = fnum;             break;         } }   void all(struct student stu[]) {      int j;     printf("学号    姓名    入学日期    成绩1    成绩2    成绩3    成绩4\n");     for(j=0;j<SIZE;j++)         printf("%d        %s        %s            %4.2f    %4.2f    %4.2f    %4.2f\n",                 stu[j].num,stu[j].name,stu[j].time,stu[j].score[0],                 stu[j].score[1],stu[j].score[2],stu[j].score[3]); }    参考一下这个代码吧，代码语句每行的长度建议不超过80个字符

user: user-3
content: #include<stdio.h> #include<string.h> #include<stdlib.h>  int SIZE; struct student                                    //声明结构体类型struct student {     int num;     char name[10];     char time[12];     float score[4];  };  void search(struct student stu[]); void input(struct student stu[]); void correct(struct student stu[]); void all(struct student stu[]);  int main()                                    //定义主函数 {     struct student stu[10];                 //定义结构体数组     int n;     int flag=1;     printf("请输入学生人数(must less equal 10)：\n");     scanf("%d",&SIZE);       while(1)                                 //当为真时，进行以下循环     {         printf("*******************************\n");         printf("学生成绩系统\n");         printf("1.输入学生信息\n");         printf("2.查找学生信息\n");         printf("3.修改学生信息\n");         printf("4.显示所有学生信息\n");         printf("5.各优秀率\n");         printf("6.退出\n");         printf("*******************************\n");         scanf("%d", &n);         switch(n)                                //用该语句实现分支选择结构         {             case 1:input(stu);  break;             case 2:search(stu);  break;             case 3:correct(stu);   break;             case 4:all(stu);    break;              case 6:flag=0;          }          system("pause");         system("cls");     }   }  void input(struct student stu[]) {     int i=0;     system("cls");     printf("输入学生信息:\n学号    姓名 入学日期    4门成绩\n");     for(i = 0;i<SIZE;i++)     {         scanf("%d %s %s %f %f %f %f", &stu[i].num, stu[i].name,               stu[i].time,&stu[i].score[0],               &stu[i].score[1],&stu[i].score[2],               &stu[i].score[3]);     } }   void search(struct student stu[])                        //子函数，定义search函数 {     int n=0,no=20,i;     char name[20];     printf("请输入查询的类型：\n");     printf("1.根据学号查询\n");     printf("2.根据姓名查询\n");     scanf("%d",&n);                                     //通过输入不同的数字进行2种选择     if(n==1)                                            //根据学号进行查询     {         printf("请输入学号\n");         scanf("%d",&no);         printf("学号    姓名 入学日期    4门成绩\n");         for( i=0;i<SIZE;i++)         {             if(stu[i].num == no)  {                 printf("%d   %s    %s   %4.2f %4.2f %4.2f %4.2f\n",                     stu[i].num,stu[i].name,stu[i].time,                     stu[i].score[0],stu[i].score[1],                     stu[i].score[2],stu[i].score[3]);                 break;             }         }         if (i >= SIZE)                 printf("查无此人\n");     }     if(n==2)     {         printf("请输入姓名\n");         scanf("%s",name);         if(strlen(name)>10)             printf("输入的名字过长\n");         else             printf("学号    姓名 入学日期    4门成绩\n");         for(i=0; i< SIZE;i++) {             if(strcmp(stu[i].name, name) == 0)  {                 printf("%d   %s    %s  %4.2f %4.2f %4.2f %4.2f\n",                     stu[i].num,stu[i].name,stu[i].time,                     stu[i].score[0],stu[i].score[1],                     stu[i].score[2],stu[i].score[3]);                 break;             }         }         if (i >= SIZE)                 printf("查无此人\n");     } }   void correct(struct student stu[]) {     int i,num0,num1;     float fnum;     printf("请输入修改学生的学号:\n");     scanf("%d", &num0);     for(i = 0; i < SIZE;i++)         if (num0 == stu[i].num) {             printf("请输入要修改第几门课的成绩:\n");             scanf("%d",&num1);             printf("请输入修改的成绩:\n");             scanf("%f", &fnum);             stu[i].score[num1-1] = fnum;             break;         } }   void all(struct student stu[]) {      int j;     printf("学号    姓名    入学日期    成绩1    成绩2    成绩3    成绩4\n");     for(j=0;j<SIZE;j++)         printf("%d        %s        %s            %4.2f    %4.2f    %4.2f    %4.2f\n",                 stu[j].num,stu[j].name,stu[j].time,stu[j].score[0],                 stu[j].score[1],stu[j].score[2],stu[j].score[3]); }   问题比较多，比如入学日期，可以用一个字符表示？ 查找，如果匹配了，就应该break出循环，否则还在匹配，自然会有”查无此人“的输出。 既然输入的是SIZE个学生信息，每个循环里都应该是循环SIZE次； 注意coding style，注释多了也会起副作用，让代码看着凌乱。

user: user-4
content: scanf("%d %s %s    %f    %f    %f    %f",&stu[i].num,stu[i].name,&stu[i].time,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3]);  终端输入时第一个%s格式字符串会将之后的值都接收到stu[i].name中，不能得到合法有效的输入。 解决办法： 6个变量分6行输入，类似: printf("input num:\n"); scanf("%d",&stu[i].num); printf("input name:\n"); scanf("%s",stu[i].name); //其它几个变量类似处理。 如果对您有帮助，请采纳答案好吗，谢谢！