yj19981008
晨风牧笛
采纳率18.8%
2018-12-10 15:43 阅读 479

c语言程序题,求解到底哪里有问题

10
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
 struct STU{
    char name[10+1];   
    int  num;
    int  time;
};
int main(){
    int C, N;
    while( scanf("%d", &C) != EOF ){
        while( C-- ){
            scanf("%d", &N);
            STU res = {"", -1, 100001};
            STU t;            
            while( N-- ){
                scanf("%s %d %d", t.name, &t.num, &t.time);
                if( t.num > res.num )
                    res = t;
                else if( t.num==res.num && t.time<res.time ){
                    res = t;    
                }                
            }
           printf("%s %d %d\n", t.name, t.num, t.time);
        }        
    }
    return 0;
}![图片说明](https://img-ask.csdn.net/upload/201812/10/1544456555_268397.png)![图片说明](https://img-ask.csdn.net/upload/201812/10/1544456570_23890.png)


    1
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • 已采纳
    loveddhaha loveddhaha 2018-12-11 08:45

    原因是少比较一次, while(N--)应改为do while(N --), 或者 while(N){ 比较程序, N--};
    N为学生数目,假设N为4, 按照当前的逻辑,第一次比较前 N=3,第二次 N=2,第三次 N=1,第四次直接退出循环了。所以是计数位置的位置。

    点赞 评论 复制链接分享
  • yj19981008 晨风牧笛 2018-12-10 15:44

    图片说明图片说明

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2018-12-10 16:05

    STU res = {"", -1, 100001};
    这个要写在循环外面。
    否则结果始终是最后一个,而你碰巧最后一个就是要找的,掩盖了错误。

    点赞 评论 复制链接分享
  • qq_28311221 温柔的小七 2018-12-12 07:45

    问题就出在最后打印的结构体
    你每次循环都把成绩好的学生放在了res结构体中
    但是最后输出的却是t的结构体数据
    过程没有错误
    结果打印出了问题
    希望采纳不明白继续追问

    点赞 评论 复制链接分享

相关推荐