鱼C论坛

 找回密码
 立即注册
查看: 762|回复: 4

[已解决]一晚上都没有找出来的一个小错误,求大佬

[复制链接]
发表于 2020-6-30 09:05:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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


/* 
 * 有10个学生
 * 每个学生的数据包括学号、姓名、3门课的成绩
 * 从键盘输入10个学生数据
 * 要求分别输出
 * 3门课程的平均成绩
 * 总分最高的学生的数据(包括学号、姓名、3门课程成绩、平均分数)
*/ 
#include<stdio.h>
#include<stdlib.h>
struct student{
        char sno[20];
        char name[20];
        int score[3];
};
main()
{
        int i;
        struct student * stu[2];
        //申请2块学生类数据 
        for(i=0;i<2;i++)
       stu[i]=(struct student *)malloc(sizeof(struct student));
        //输入数据
      for(i=0;i<2;i++)
      {
            printf("--------请输入第%d个学生信息的学号、姓名、三科对应分数--------\n",i+1);
            
            printf("请输入第%d个学生的学号:",i+1) ;
            gets(stu[i]->sno);//输入学号 
            
            printf("\n");
            
            printf("请输入第%d个学生的姓名:",i+1) ;
            gets(stu[i]->name);//输入姓名
                 
            printf("\n");
            
            printf("请输入第%d个学生的三科对应成绩:",i+1) ;        
            scanf("%d %d %d",&stu[i]->score[0],&stu[i]->score[1],&stu[i]->score[2]); //输入分别对应成绩  
                        
            printf("\n");
            
        }
}
最佳答案
2020-6-30 09:31:07
试试:
/* 
 * 有10个学生
 * 每个学生的数据包括学号、姓名、3门课的成绩
 * 从键盘输入10个学生数据
 * 要求分别输出
 * 3门课程的平均成绩
 * 总分最高的学生的数据(包括学号、姓名、3门课程成绩、平均分数)
*/ 
#include<stdio.h>
#include<stdlib.h>
struct student{
        char sno[20];
        char name[20];
        int score[3];
};
main()
{
        int i;
        struct student * stu[2];
        //申请2块学生类数据 
        for(i=0;i<2;i++)
       stu[i]=(struct student *)malloc(sizeof(struct student));
        //输入数据
      for(i=0;i<2;i++)
      {
            printf("--------请输入第%d个学生信息的学号、姓名、三科对应分数--------\n",i+1);
            
            printf("请输入第%d个学生的学号:",i+1) ;
            gets(stu[i]->sno);//输入学号 
            
            printf("\n");
            
            printf("请输入第%d个学生的姓名:",i+1) ;
            gets(stu[i]->name);//输入姓名
                 
            printf("\n");
            
            printf("请输入第%d个学生的三科对应成绩:",i+1) ;        
            scanf("%d %d %d",&stu[i]->score[0],&stu[i]->score[1],&stu[i]->score[2]); //输入分别对应成绩 
 
            getchar();    
            printf("\n");
            
        }
}
1IB}J1J51QZCP~9]HH{X~OB.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-30 09:31:07 | 显示全部楼层    本楼为最佳答案   
试试:
/* 
 * 有10个学生
 * 每个学生的数据包括学号、姓名、3门课的成绩
 * 从键盘输入10个学生数据
 * 要求分别输出
 * 3门课程的平均成绩
 * 总分最高的学生的数据(包括学号、姓名、3门课程成绩、平均分数)
*/ 
#include<stdio.h>
#include<stdlib.h>
struct student{
        char sno[20];
        char name[20];
        int score[3];
};
main()
{
        int i;
        struct student * stu[2];
        //申请2块学生类数据 
        for(i=0;i<2;i++)
       stu[i]=(struct student *)malloc(sizeof(struct student));
        //输入数据
      for(i=0;i<2;i++)
      {
            printf("--------请输入第%d个学生信息的学号、姓名、三科对应分数--------\n",i+1);
            
            printf("请输入第%d个学生的学号:",i+1) ;
            gets(stu[i]->sno);//输入学号 
            
            printf("\n");
            
            printf("请输入第%d个学生的姓名:",i+1) ;
            gets(stu[i]->name);//输入姓名
                 
            printf("\n");
            
            printf("请输入第%d个学生的三科对应成绩:",i+1) ;        
            scanf("%d %d %d",&stu[i]->score[0],&stu[i]->score[1],&stu[i]->score[2]); //输入分别对应成绩 
 
            getchar();    
            printf("\n");
            
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-30 09:33:05 | 显示全部楼层

为什么要在后面加一个getchar(),能解释一下吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-30 09:33:07 | 显示全部楼层
最后一行代码前加一句,情况下面代码
/* 
 * 有10个学生
 * 每个学生的数据包括学号、姓名、3门课的成绩
 * 从键盘输入10个学生数据
 * 要求分别输出
 * 3门课程的平均成绩
 * 总分最高的学生的数据(包括学号、姓名、3门课程成绩、平均分数)
*/ 
#include<stdio.h>
#include<stdlib.h>
struct student{
        char sno[20];
        char name[20];
        int score[3];
};
main()
{
        int i;
        struct student * stu[2];
        //申请2块学生类数据 
        for(i=0;i<2;i++)
       stu[i]=(struct student *)malloc(sizeof(struct student));
        //输入数据
      for(i=0;i<2;i++)
      {  
            printf("--------请输入第%d个学生信息的学号、姓名、三科对应分数--------\n",i+1);
            
            printf("请输入第%d个学生的学号:",i+1) ;
            gets(stu[i]->sno);//输入学号 
            
            printf("\n");
            
            printf("请输入第%d个学生的姓名:",i+1) ;
            gets(stu[i]->name);//输入姓名
                 
            printf("\n");
            
            printf("请输入第%d个学生的三科对应成绩:",i+1) ;        
            scanf("%d %d %d",&stu[i]->score[0],&stu[i]->score[1],&stu[i]->score[2]); //输入分别对应成绩  
            getchar();  //加上这个函数 把输入成绩后的回车从缓冲区清除掉           
            printf("\n");
            
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-30 09:34:07 | 显示全部楼层
爱学习520 发表于 2020-6-30 09:33
为什么要在后面加一个getchar(),能解释一下吗

scanf 完了还留了一个回车,需要把这个回车清掉,否则 gets 只会从缓冲区读一个回车。

评分

参与人数 1荣誉 +1 收起 理由
爱学习520 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 13:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表