Код должен читать результат гонки и сохранять их в структуре. Структура одинакова как для стабильной, так и для пилотной версии, потому что в обоих случаях мне нужно хранить только точки и имя.
Текст, который он должен прочитать, имеет этот тип
Hamilton mercedes
Bottas mercedes
Verstappen redbull
Norris mclaren
Albon redbull
Perez racingpoint
Leclerc ferrari
Stroll racingpoint
Sainz mclaren
Vettel ferrari
Ricciardo Renault
Gasly alphatauri
ocon renault
Giovinazzi alfaromeo
Kvyat alphatauri
Magnussen haas
Raikkonen alfaromeo
Latifi williams
Grosjean Haas
Russel williams
Исправлено количество стабильных 10 и драйверов 20. В этом тексте есть только 1 гонка, но функция чтения сделана так, чтобы можно было читать больше, одну за другой. имя уже упорядочено на основе результата. первое имя - это имя победителя, второе имя - это имя второго и т. д., в зависимости от их положения они получат очки и будут сохранены в структуре с их очками и их именем (очки будут добавляться в каждой гонке )
Теперь мне действительно нужна функция для инициализации массива, содержащего драйверы и конюшни, которая будет initialize_array
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define POSITIONS_WITH_POINTS 10
#define MAX_LINE 50
#define N_PILOTS 20
#define N_TEAM 10
int point_for_position[POSITIONS_WITH_POINTS] = {
25, 18, 15, 10, 8, 6, 4, 2,1
};
struct qualified {
char name[MAX_LINE + 1];
int points;
};
struct qualified *look_for_qualified(struct qualified *array, int size, char *name)
{
int i = 0;
for( i = 0; i < size; i++) {
if (strcmp(array[i].name, name) == 0)
return &array[i];
if(array[i].name[0] == '\0') {
strcpy(array[i].name, name);
array[i].points = 0;
return &array[i];
}
}
return NULL;
}
int read_race(FILE *fin, struct qualified *pilots, struct qualified *stable)
{
char buffer[MAX_LINE + 1];
int pos;
char pilot_name[MAX_LINE + 1];
char stable_name[MAX_LINE + 1];
int points;
pos = 0;
while( pos < N_PILOTS &&
fgets(buffer, MAX_LINE +1, fin) != NULL) {
/*sscanf(buffer, "%s %s", nome_pilota, nome_scudderia);
if (pos < POS_A_PUNTI)
punti = punti_per_pos[pos];
else
punti = 0;
*/
struct qualified *pilot = look_for_qualified(pilot, N_PILOTS, pilot_name);
pilot->points += points;
struct qualified *stable =
look_for_qualified(stable, N_TEAM, stable_name);
stable->points += points;
pos++;
}
return pos;
}
initizlize_array()
{
}
int main(int argc, char *argv[])
{
struct qualified pilot[N_PILOTS];
struct qualified stable[N_TEAM];
FILE *fin;
int i;
if (argc != 2 ) {
printf(" wrong number of arguments");
return 1;
}
fin = fopen(argv[1], "rt");
//initizlize_array(pilot, N_PILOTS);
//initizlize_array(stable, N_TEAM);
while (read_race(fin, pilot, stable) != 0 ) {
}
fclose(fin);
}