德恩en 2021-12-26 23:27 采纳率: 90%
浏览 82
已结题

C语言,哪里有错误,为什么运行会乱码

是不是没加每个学生分别的总成绩导致的?

img

img

img

img






#include <stdio.h>
struct stu
{
    char xm[20];    //姓名
    char xh[20];    //学号
    int pscj;      // 平时成绩
    int qmcj;      //期末成绩
    float zcj;       //总成绩
};
int main()
{
    struct stu student[4],t;
    int i,f=0,j;float sum=0;
    int a,s,d,g,h;a=s=d=g=h=0;
    float average;
    printf("Please enter student information");
    printf("name\t Student id\t grades\t The final result\n");
    for(i=0;i<4;i++)
        scanf("%s,%s,%d,%d",student[i].xm,student[i].xh,&student[i].pscj,&student[i].qmcj);
    printf("The total score of the students is\n");
    for(i=0;i<4;i++)
    {
        student[i].zcj=student[i].pscj*0.3+student[i].qmcj*0.7;
        sum+=student[i].zcj;
    }
    for(i=0;i<2;i++)
    {
        printf("% f",student[i].zcj);
    }
    average=sum/4.0;
    for(i=0;i<4;i++)
        for(j=0;j<4-i;j++)
        {
            if(student[j].zcj>student[j+1].zcj)
            {
                t=student[j];
                student[j]=student[j+1];
                student[j+1]=t;
            }
}
    for(i=0;i<4;i++)
{
    printf("%s,%s,%d,%d,%f\n",student[i].xm,student[i].xh,student[i].pscj,student[i].qmcj,student[i].zcj);
}
    for(i=0;i<4;i++)
    {
        if(student[i].zcj>=average)
        {
    f++;
    printf("%s,%s,%d,%d,%f\n",student[i].xm,student[i].xh,student[i].pscj,student[i].qmcj,student[i].zcj);
}

    }
    printf("Class size%f%",(f/4)*100);
    printf("        A       B      C      D       E\n");
    for(i=0;i<4;i++)
            
            {
                switch(int(student[i].zcj)/4)
                {
                    case 10:
                    case 9:a++;
                           break;
                    case 8:s++;
                           break;
                    case 7:d++;
                           break;
                    case 6:g++;
                           break;
                    default:h++;
                }
            }
            printf("%2d(%.1f%%)  ",a,(double)a/4*100);
            printf("%2d(%.1f%%)  ",s,(double)s/4*100);
            printf("%2d(%.1f%%)  ",d,(double)d/4*100);
            printf("%2d(%.1f%%)  ",g,(double)g/4*100);
            printf("%2d(%.1f%%)\n",h,(double)h/4*100);
    for(i=0;i<4;i++)
    {
        if(student[i].zcj>=0&&student[i].zcj<60)
        {
            printf("%s,%s,%d,%d,%f\n",student[i].xm,student[i].xh,student[i].pscj,student[i].qmcj,student[i].zcj);
        }
    }
           }
  • 写回答

3条回答 默认 最新

  • 赵4老师 2021-12-27 10:55
    关注

    scanf里面的%s全部改为%[^,\n]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月7日
  • 已采纳回答 12月30日
  • 修改了问题 12月29日
  • 修改了问题 12月28日
  • 展开全部

悬赏问题

  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 MATLAB中streamslice问题
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 51单片机中C语言怎么做到下面类似的功能的函数(相关搜索:c语言)
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序