c语言程序题,求解到底哪里有问题
#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个回答

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

图片说明图片说明

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐