爱学习520 发表于 2020-6-30 09:05:33

一晚上都没有找出来的一个小错误,求大佬

本帖最后由 爱学习520 于 2020-6-30 09:08 编辑

为什么我这个程序到 输入第二个学生学号 的时候直接跳过了,根本无法输入第二个学生的学号,如图 :
昨天到今天都没有找出来的错误,请求大佬



/*
* 有10个学生
* 每个学生的数据包括学号、姓名、3门课的成绩
* 从键盘输入10个学生数据
* 要求分别输出
* 3门课程的平均成绩
* 总分最高的学生的数据(包括学号、姓名、3门课程成绩、平均分数)
*/
#include<stdio.h>
#include<stdlib.h>
struct student{
        char sno;
        char name;
        int score;
};
main()
{
        int i;
        struct student * stu;
        //申请2块学生类数据
        for(i=0;i<2;i++)
       stu=(struct student *)malloc(sizeof(struct student));
        //输入数据
      for(i=0;i<2;i++)
      {
            printf("--------请输入第%d个学生信息的学号、姓名、三科对应分数--------\n",i+1);
           
            printf("请输入第%d个学生的学号:",i+1) ;
            gets(stu->sno);//输入学号
           
            printf("\n");
           
            printf("请输入第%d个学生的姓名:",i+1) ;
            gets(stu->name);//输入姓名
               
            printf("\n");
           
            printf("请输入第%d个学生的三科对应成绩:",i+1) ;       
            scanf("%d %d %d",&stu->score,&stu->score,&stu->score); //输入分别对应成绩
                       
            printf("\n");
           
        }
}

永恒的蓝色梦想 发表于 2020-6-30 09:31:07

试试:/*
* 有10个学生
* 每个学生的数据包括学号、姓名、3门课的成绩
* 从键盘输入10个学生数据
* 要求分别输出
* 3门课程的平均成绩
* 总分最高的学生的数据(包括学号、姓名、3门课程成绩、平均分数)
*/
#include<stdio.h>
#include<stdlib.h>
struct student{
      char sno;
      char name;
      int score;
};
main()
{
      int i;
      struct student * stu;
      //申请2块学生类数据
      for(i=0;i<2;i++)
       stu=(struct student *)malloc(sizeof(struct student));
      //输入数据
      for(i=0;i<2;i++)
      {
            printf("--------请输入第%d个学生信息的学号、姓名、三科对应分数--------\n",i+1);
            
            printf("请输入第%d个学生的学号:",i+1) ;
            gets(stu->sno);//输入学号
            
            printf("\n");
            
            printf("请输入第%d个学生的姓名:",i+1) ;
            gets(stu->name);//输入姓名
               
            printf("\n");
            
            printf("请输入第%d个学生的三科对应成绩:",i+1) ;      
            scanf("%d %d %d",&stu->score,&stu->score,&stu->score); //输入分别对应成绩

            getchar();   
            printf("\n");
            
      }
}

爱学习520 发表于 2020-6-30 09:33:05

永恒的蓝色梦想 发表于 2020-6-30 09:31
试试:

为什么要在后面加一个getchar(),能解释一下吗

jhanker 发表于 2020-6-30 09:33:07

最后一行代码前加一句,情况下面代码
/*
* 有10个学生
* 每个学生的数据包括学号、姓名、3门课的成绩
* 从键盘输入10个学生数据
* 要求分别输出
* 3门课程的平均成绩
* 总分最高的学生的数据(包括学号、姓名、3门课程成绩、平均分数)
*/
#include<stdio.h>
#include<stdlib.h>
struct student{
      char sno;
      char name;
      int score;
};
main()
{
      int i;
      struct student * stu;
      //申请2块学生类数据
      for(i=0;i<2;i++)
       stu=(struct student *)malloc(sizeof(struct student));
      //输入数据
      for(i=0;i<2;i++)
      {
            printf("--------请输入第%d个学生信息的学号、姓名、三科对应分数--------\n",i+1);
            
            printf("请输入第%d个学生的学号:",i+1) ;
            gets(stu->sno);//输入学号
            
            printf("\n");
            
            printf("请输入第%d个学生的姓名:",i+1) ;
            gets(stu->name);//输入姓名
               
            printf("\n");
            
            printf("请输入第%d个学生的三科对应成绩:",i+1) ;      
            scanf("%d %d %d",&stu->score,&stu->score,&stu->score); //输入分别对应成绩
            getchar();//加上这个函数 把输入成绩后的回车从缓冲区清除掉         
            printf("\n");
            
      }
}

永恒的蓝色梦想 发表于 2020-6-30 09:34:07

爱学习520 发表于 2020-6-30 09:33
为什么要在后面加一个getchar(),能解释一下吗

scanf 完了还留了一个回车,需要把这个回车清掉,否则 gets 只会从缓冲区读一个回车。
页: [1]
查看完整版本: 一晚上都没有找出来的一个小错误,求大佬