为了账号安全,请及时绑定邮箱和手机立即绑定

这段代码老得不到正确的结果,哪儿错了?求高人指点

这段代码老得不到正确的结果,哪儿错了?求高人指点

C C++
DreachmeR 2016-11-29 22:41:55
/*【问题描述】 从标准输入连续读入n(n<10)个学生的学号(不超过int类型表示范围)、姓名(由不超过10个英文字母组成)以及数学、英语、语文三门课的成绩,计算个人的平均成绩,并且按个人的总成绩由高到低排序(如果总成绩相同,按学号由低到高排序,但前面的排序序号不变,即两人排名相同),将排名结果在屏幕上显示出来(要求同一列右对齐,其中排名占4个字符、学号占10个字符,姓名占10个字符,数学、英语、语文各占5个字符)。如输入的学生人数n大于等于10,则打印输出“Please input 1-9.“, 然后,退出程序。 【输入形式】 从控制台输入一个小于10的正整数,表示学生人数;然后分行输入学号、姓名以及数学、英语、语文三门课的成绩,中间用空格分隔。 【输出形式】 1、控制台输出排序结果,要求输出:排名结果、学号、姓名、数学成绩、英语成绩、语文成绩。 2、要求同一列右对齐,其中排名占4个字符、学号占10个字符,姓名占10个字符,数学、英语、语文各占5个字符。 3、如两人成绩相同,总成绩相同,按学号由低到高排序输出,但前面的排序序号不变,即两人排名相同。 【样例输入1】 8 39060415 zf 98 88 85 39060427 lzw 87 92 88 39060413 wr  95 86 90 39060412 wp 95 85 91 39060405 syj 78 82 69 39060425 yef 85 78 93 39060419 sw 75 89 88 39060421 rr 89 88 75*/ 【样例输出1】    1  39060412        wp   95   85   91    1  39060413        wr   95   86   90    1  39060415        zf   98   88   85    4  39060427       lzw   87   92   88    5  39060425       yef   85   78   93    6  39060419        sw   75   89   88    6  39060421        rr   89   88   75    8  39060405       syj   78   82   69#include "stdafx.h"#include <stdlib.h>#include <stdio.h>#include <string.h> typedef struct stuInf { int stuID; char stuName[10]; int stuMath; int stuEng; int stuChi; int markAll=stuMath+stuEng+stuChi;}; void stuArrSort(stuInf *pStu, int size);//进行排序void stuArrRakOut(stuInf *pStu, int size);//进行排名并输出 void stuArrSort(stuInf *pStu, int size) { /*根据总分排序*/ int i, j; for (i = 0; i < size - 1; i++) {  for (j = i + 1; j < size; j++) {   if ((pStu+i)->markAll < (pStu+j)->markAll){    stuInf tmp = *(pStu + i);    *(pStu + i) = *(pStu + j);    *(pStu + j) = tmp;   }    } }  /*根据学号排序*/ for (i = 0; i < size - 1; i++) {  for (j = i + 1; j < size; j++) {   if ((pStu + i)->markAll == (pStu + j)->markAll) {    if ((pStu + i)->stuID > (pStu + j)->stuID) {     stuInf tmp = *(pStu + i);     *(pStu + i) = *(pStu + j);     *(pStu + j) = tmp;    }   }   else {    continue;   }  } }} void stuArrRakOut(stuInf *pStu, int size) { int i,rak=1; printf("%d %d %s %d %d %d\n", rak, (pStu + 0)->stuID,(pStu + 0)->stuName,(pStu+0)->stuMath,(pStu+0)->stuEng,(pStu+0)->stuChi); for (i = 1; i < size; i++) {  if ((pStu + i)->markAll == (pStu + (i-1))->markAll) {   printf("%d %d %s %d %d %d\n", rak, (pStu + i)->stuID, (pStu + i)->stuName, (pStu + i)->stuMath, (pStu + i)->stuEng, (pStu + i)->stuChi);  }  else {   rak=i;   printf("%d %d %s %d %d %d\n", rak, (pStu + i)->stuID, (pStu + i)->stuName, (pStu + i)->stuMath, (pStu + i)->stuEng, (pStu + i)->stuChi);  } }} int main(){ int iniNum; scanf_s("%d", &iniNum);  if (iniNum < 1 || iniNum>9) {  printf("Please input num 1-9. \n"); } else {   stuInf *stuArr = (stuInf*)malloc(sizeof(stuInf)*iniNum);   int i;  for (i = 0; i < iniNum; i++) {   scanf_s("%d %s %d %d %d", &((stuArr + i)->stuID), ((stuArr + i)->stuName),10, &((stuArr + i)->stuMath), &((stuArr + i)->stuEng), &((stuArr+i)->stuChi));  }   stuArrSort(stuArr, iniNum);  stuArrRakOut(stuArr, iniNum);   free(stuArr);  }  system("pause"); return 0;}
查看完整描述

3 回答

?
wiklvrain

TA贡献1条经验 获得超0个赞

结构体定义发生了些问题= =还有就是scanf_s里面写的具体有问题。

如果可能希望你能自己改下吧= =

查看完整回答
反对 回复 2016-11-30
?
小江xue

TA贡献2条经验 获得超0个赞

......................         l

查看完整回答
反对 回复 2016-11-30
?
00小伙

TA贡献86条经验 获得超30个赞

路过,看到那么长就不想看了。。。。

查看完整回答
反对 回复 2016-11-29
  • 3 回答
  • 0 关注
  • 2985 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信