在c语言中如何输入两个字符串

问题:有10个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入10个学生数据,要求打印出三门课总平均成绩,以及最高分的学生的数据(包括学号、 姓名、三门课成绩、平均分数)。
请帮忙看一下我的代码问题在哪,实在找不到了
我的代码:

#include <stdio.h>
int main()
{
    int a[10][4];
    char c[10];
    int i,j,b[10],max,who,Z1=0,Z2=0,Z3=0;
    float z1,z2,z3;
    scanf("%s~~~~~~~~~",c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],c[8],c[9]);
    for(i=0;i<10;i++)
        for(j=0;j<4;j++)
        {
            if(j!=3)
            scanf("%d",&a[i][j]);
            else
            scanf("%d\n",&a[i][j]);
        }
    for(i=0;i<10;i++)
    b[i]=a[i][1]+a[i][2]+a[i][3];
    for(i=0;i<10;i++)
        for(j=0;j<4;j++)
        {
            if(j==1)
            Z1+=a[i][j];
            else if(j==2)
            Z2+=a[i][j];
            else if(j==3)
            Z3+=a[i][j];
        }
    max=b[0],z1=1.0*Z1/3,z2=1.0*Z2/3,z3=1.0*Z3/3;
    for(i=0;i<10;i++)
    {
        if(b[i]>max)
        max=b[i],who=i;
    }
    printf("三门课总平均成绩分别为%.1f,%.1f,%.1f\n最高分学生数据:\n姓名:%s\n学号:%d\n三门课成绩分别为%d,%d,%d平均分数为%.1f",z1,z2,z3,c[who],a[who][0],a[who][1],a[who][2],a[who][3],1.0*max/3);
    return 0;
}
输入:
小红 小明 小于 小哈 小马 小黑 小花 小黄 小蜡 小胡
1 24 78 96
2 35 28 25
3 65 23 15
4 97 46 84
5 65 22 94
6 46 44 65
7 77 99 55
8 19 27 94
9 94 64 15
10 46 18 87
结果:
:Segmentation fault


我把代码修改了求三个学生的平均成绩和最高分进行了测试,测试正常,下面是求题目要求10个学生平均成绩和最高分的代码,供参考:

#include <stdio.h>
int main()
{
    int a[10][4];
    char c[10][20];  //10个学生的姓名可以用一个二维字符数组存储,字符数组只能存放一个学生的姓名 
    int i,j,b[10],max,who,Z1=0,Z2=0,Z3=0;
    float z1,z2,z3;
    for(i=0;i<10;i++){  //每个学生的姓名用一个scanf读取,写法稍微简单点,一个%s一般是获取一个学生姓名字符串 
        scanf("%s",c[i]);
    } 
    
    for(i=0;i<10;i++)
        for(j=0;j<4;j++)  
        {
            scanf("%d",&a[i][j]); //用循环获取整数输入来赋值给二维学生成绩学号数组 
//            if(j!=3)
//            scanf("%d",&a[i][j]);
//            else
//            scanf("%d\n",&a[i][j]);
        }
     
     //每个学生的总分   
    for(i=0;i<10;i++)
            b[i]=a[i][1]+a[i][2]+a[i][3];
       
     //三门功课的总成绩       
    for(i=0;i<10;i++)
        for(j=0;j<4;j++)
        {
            if(j==1)
                Z1+=a[i][j];
            else if(j==2)
                   Z2+=a[i][j];
            else if(j==3)
                   Z3+=a[i][j];
        }
        
    max=b[0],z1=1.0*Z1/3,z2=1.0*Z2/3,z3=1.0*Z3/3;
    for(i=0;i<10;i++)
    {
        if(b[i]>max)
                max=b[i],who=i;
    }
    printf("三门课总平均成绩分别为%.1f,%.1f,%.1f\n最高分学生数据:\n姓名:%s\n学号:%d\n三门课成绩分别为%d,%d,%d,平均分数为%.1f",z1,z2,z3,c[who],a[who][0],a[who][1],a[who][2],a[who][3],1.0*max/3);
    return 0;
}

 
 

img

你写得有点凌乱,下面是我写得,仅供参考,谢谢!

#include<stdio.h>

#define N 5

int main()
{
    
    struct student{
        int no;//学号
        char name[20];//姓名
        float chinese;//语文
        float math;//数学
        float eng;//英语
        float total;//总分
        float avg;//平均分     
    }stu[N];
    
    float avgAll[3];//全班语文数学英语平均分
    float totalAll[3]={0.0,0.0,0.0};//全班语文数学英语总分
    float totalMax;//总分最高
    int index=0;//总分最高者索引
    
    printf("分别输入 彼此之间用空格隔开\n");
    printf("\n学号  姓名  语文成绩  数学成绩  英语成绩\n\n");
  
    //输入
    for(int i=0;i<N;i++)
    {
        scanf("%d %s %f %f %f",&stu[i].no,stu[i].name,&stu[i].chinese,&stu[i].math,&stu[i].eng);
    
    }
    //分别求每个学生的总分以及平均分以及各科全班总分
    for(int i=0;i<N;i++)
    {
        stu[i].total=stu[i].chinese+stu[i].math+stu[i].eng;
        stu[i].avg=(stu[i].chinese+stu[i].math+stu[i].eng)/3;
        totalAll[0]+=stu[i].chinese;
        totalAll[1]+=stu[i].math;
        totalAll[2]+=stu[i].eng;
        
    }
    
    //分别求全班语文平均分,数学平均分,英语平均
    avgAll[0]=totalAll[0]/N;
    avgAll[1]=totalAll[1]/N;
    avgAll[2]=totalAll[2]/N;
    
    //求出总分最高的学生
    for(int i=0;i<N;i++)
    {
        if(i==0)
            totalMax=stu[i].total;
        if(stu[i].total>totalMax)
        {
            totalMax=stu[i].total;
            index=i;          
        }
         
    }
     
    //输出全班各科平均分
    printf("\n全班语文平均:%.1f\n全班数学平均分:%.1f\n全班英语平均分:%.1f\n\n",avgAll[0],avgAll[1],avgAll[2]);
    
    //全班总分第一名学生信息
    printf("\n总分第一名的学生\n学号:%3d\n姓名:%s\n语文:%.1f\n数学:%.1f\n英语:%.1f\n",stu[index].no,stu[index].name,stu[index].chinese,stu[index].math,stu[index].eng);   

    return 0;
}

 
 

img