qq_40602393 2019-07-11 09:30 采纳率: 100%
浏览 926
已采纳

C语言结构体输出问题,输出不了结果

为什么输出不了计算出的结果,只能输出两行文字
代码如下:
#include
#include
#define N 3
typedef struct
{
int id;//学号
char name[20];//姓名
char subject[20];//考试科目
float perf;//平时成绩
float mid;//期中成绩
float final;//期末成绩
float total;//总评
char level[10];//等级
}STU;
void input(STU [],int);//输入学生信息
void clac(STU[],int);//计算总评和等级
int fail(STU[],STU[],int);//计算不及格学生人数
void sort(STU[],int);//排序
void show(STU[],STU[],int,int);//输出学生信息
void input(STU s[],int n){//输入学生信息
for(int i=0;i printf("请输入学生信息:\n");
scanf("%d%s%s%f%f%f",&s[i].id,&s[i].name,&s[i].subject,&s[i].perf,&s[i].mid,&s[i].final);
}
}
void clac(STU s[],int n){//计算总评和成绩
for(int i=0;i s[i].total=0.2*s[i].perf+0.2*s[i].mid+0.6*s[i].final;
if(s[i].total>=90){
strcpy(s[i].level,"优秀");
}
else if(s[i].total>=80&&s[i].total strcpy(s[i].level,"良好");
}
else if(s[i].total>=70&&s[i].total strcpy(s[i].level,"中等");
}
else if(s[i].total>=60&&s[i].total<70){
strcpy(s[i].level,"及格");
}
else{
strcpy(s[i].level,"不及格");
}
}

}
int fail(STU s[],STU t[],int n){//计算不及格人数
int i,k=0;
for(i=0;i<n;i++){
if(s[i].total<60){
t[k++]=s[i];
}
}
return k;
}
void sort(STU s[],int n){//排序
int i,j;
STU temp;
for(i=0;i<n-1;i++){
for(j=0;j<n-1-i;j++){
if(s[j].total<s[j+1].total){
temp=s[j+1];
s[j+1]=s[j];
s[j]=temp;
}
}
}
}
void show(STU s[],STU t[],int n,int m){
int i;
printf("学生成绩排名情况\n");
printf("------------------\n");
printf("姓名 学号 考试科目 平时成绩 期中成绩 期末成绩 总评 成绩等级\n");
for(i=0;i<n;i++){
printf("%10s%5d%20s%5.1f%5.1f%5.1f%5.1f%5.1f%10s\n",s[i].name,s[i].id,s[i].subject,s[i].perf,s[i].mid,s[i].final,s[i].total,s[i].level);
}
printf("不及格学生情况\n");
printf("------------------\n");
printf("姓名 学号 考试科目 平时成绩 期中成绩 期末成绩 总评 成绩等级\n");
for(i=0;i<m;i++){
printf("%10s%5d%20s%5.1f%5.1f%5.1f%5.1f%5.1f%10s\n",t[i].name,t[i].id,t[i].subject,t[i].perf,t[i].mid,t[i].final,t[i].total,t[i].level);
}
}
int main(){
STU ccc[N],cwy[N];
int k;
input(ccc,N);
clac(ccc,N);
k=fail(ccc,cwy,N);
sort(ccc,N);
show(ccc,cwy,N,k);
return 0;
}

  • 写回答

4条回答 默认 最新

  • qtchen_1988 2019-07-11 11:19
    关注
    printf("%10s%5d%20s%5.1f%5.1f%5.1f%5.1f%5.1f%10s\n",s[i].name,s[i].id,s[i].subject,s[i].perf,s[i].mid,s[i].final,s[i].total,s[i].level);
    -->
    printf("%10s%5d%20s%5.1f%5.1f%5.1f%5.1f%10s\n",s[i].name,s[i].id,s[i].subject,s[i].perf,s[i].mid,s[i].final,s[i].total,s[i].level);
    写多了一个 %5.1f,应该去掉一个%5.1f。
    
    

    图片说明

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

报告相同问题?

悬赏问题

  • ¥500 高有偿提问!求优化设计微信小程序
  • ¥15 matlab在安装时报错 无法找到入口 无法定位程序输入点
  • ¥15 收益高的广告联盟有哪些
  • ¥15 Android Studio webview 的使用问题, 播放器横屏全屏
  • ¥15 删掉jdk后重新下载,Java web所需要的eclipse无法使用
  • ¥15 uniapp正式环境中通过webapi将本地数据推送到设备出现的跨域问题
  • ¥15 xui建立节点,显示错误
  • ¥15 关于#单片机#的问题:开始、复位、十进制的功能可以实现,但是切换八进制的功能无法实现(按下按键也没有效果),把初始状态调成八进制,也是八进制可以实现但是切换到十进制不行(相关搜索:汇编语言|计数器)
  • ¥15 VINS-Mono或Fusion中feature_manager中estimated_depth是特征的深度还是逆深度?
  • ¥15 谷歌浏览器如何备份抖音网页数据