Есть много странных вещей. Во-первых, кажется, что имена находятся в файле, но вы делаете на каждой итерации цикла for, вы вызываете get_names
, который снова открывает файл, то есть идет в начало файла, и вы читайте одно и то же имя снова и снова.
Это если вы закрыли файл. Поскольку вы не закрыли файл, файл уже открыт, и вы продолжаете открывать его (что может быть причиной вашей проблемы)
Другое дело, как можно
if (status == EOF) {
count = MAX_PLAYRS;
}
Дайте вам текущий счет? Независимо от количества игроков в файле, вы просто устанавливаете его на MAX_PLAYERS
.
Другое дело, что count
является входом для функции, которая не является указателем, поэтому ее установка не изменяет значение вне функции (что, как я и предполагал, вы хотели).
Вот как бы я сделал это с минимальным изменением вашего кода:
#include <stdio.h>
#define MAX_NAME 20
#define MAX_PLAYRS 16
typedef struct {
char pname[MAX_NAME];
int runs;
char how_out;
} Team_t;
Team_t player[MAX_PLAYRS];
Team_t *player_ptr[MAX_PLAYRS];
void get_names (int count, char *str, FILE *inp);
int main (void) {
FILE *inp;
int i;
int count;
inp = fopen("teamnames.rtf", "r");
for (i = 0; i < MAX_PLAYRS; i++) {
get_names(&count, player[i].pname, inp);
printf("Player: %s\n", player[i].pname);
}
}
void get_names (int *count, char *str) {
char status;
status = fscanf(inp, "%s", str);
if (status == EOF) {
*count = MAX_PLAYRS;
}
}
Вот как бы я сделал это более кратко:
#include <stdio.h>
#define MAX_NAME 20
#define MAX_PLAYRS 16
typedef struct {
char pname[MAX_NAME];
int runs;
char how_out;
} Team_t;
Team_t player[MAX_PLAYRS];
Team_t *player_ptr[MAX_PLAYRS];
int get_names (Team_t *team);
int main (void) {
get_names(player);
}
int get_names (Team_t *team) {
int i = 0;
FILE *inp;
inp = fopen("teamnames.rtf", "r");
while (i < MAX_PLAYRS && !feof(inp) {
fscanf(inp, "%s", team[i].pname);
printf("Player: %s\n", player[i].pname);
}
}
Обратите внимание , что проблемы с fscanf
, проверкой границ массива и т. Д. Не являются проблемой этого решения, но это скорее дает вам представление о том, что делать, а не код для копирования-вставки .