所以我想计算在四场自行车比赛中谁拥有最多的DNF。
我只能过滤并打印未完成的骑手。
但是由于我对数组还比较陌生,因此在编写可以执行以下操作的逻辑时遇到了麻烦:

仅打印四场比赛中DNF最多的骑手。

这是我返回所有DNF骑手的循环,因此重复了一些名称:

  int i;

  for(i = 0; i < 790; i++){
    if(strcmp(results[i].rider_placement, "DNF") == 0) {
      printf(" %-40s \n",
      results[i].rider_name);
    }
  }


我知道这可能还不够,但是任何可以帮助我思考的信息都将受到赞赏。

编辑:为了澄清DNF是从比赛中退休的车手

这是用于存储txt文件中数据的结构:

例如巴黎鲁拜“ Greg VAN AVERMAET” 32 BMC BEL 1 5:41:07

例如巴黎鲁拜“ Sam BEWLEY” 30 ORS NZL DNF 0

struct result_t {
char stage_name[STAGE_LEN];
char rider_name[NAME_LEN];
int  rider_age;
char rider_team[TEAM_LEN];
char rider_nation[NATION_LEN];
char rider_placement[NATION_LEN];
char time[TIME_LEN];
};

最佳答案

您为什么不向结构添加计数器呢?

struct result_t {
    char stage_name[STAGE_LEN];
    .
    .
    int counter = 0;
}


每当此人收到DNF时,就像在您提供的循环中一样

for(i = 0; i < 790; i++){
    if(strcmp(results[i].rider_placement, "DNF") == 0) {
        printf(" %-40s \n",
        results[i].rider_name);
        results[i].counter += 1;  //<-- pref. impl counter
    }
}


您将其计数,然后在完成数学运算后比较所有计数器
所以看看谁的最高。

07-24 09:44