Błąd pokazuje mi się w debuggerze, gdy uruchamiam program normalnie, to zawiesza się program, a gdy uruchomię go bez argumentu wiersza poleceń - działa, tylko, że wyskakuje komunikat o nieprawidłowej ilości argumentów, tak jak oczekiwano. Program ma za zadanie wczytać o ile to możliwe listę struktur 18 graczy z czterech plików, każdy plik reprezentuje jeden mecz (18 graczy ze statystykami). Każda struktura składa się z imienia i nazwiska gracza, liczby rzutów trafionych i ogólnej liczby rzutów, liczby asysty i fauli, skuteczność jest obliczana. Program zatem ma wyświetlać te wartości wraz z obliczoną skutecznością dla każdego gracza i dla całej drużyny z jednego meczu... oraz na samym końcu dla wszystkich meczy. Proszę o pomoc.
EDIT: Wkleiłem poprawione/dokończone.
#include <stdio.h>
#include <string.h>
#define MAX_NAME 12
#define MAX_SURNAME 16
#define MAX_PLAYERS 18
#define MAX_MATCHES 4
#define GET_STATS_ERR "\nBlad przy odczycie danych z pliku/ow.\n"
#define ARGC_ERR "\nZa malo argumentow wiersza polecen.\n"
#define FOPEN_ERR "\nProblem z otwieraniem pliku: "
#define FSCANF_ERR "Problem z wczytywaniem danych z pliku: "
#define MATCH_RESULT_TEXT "Wyniki dla meczu nr. "
#define NAME "Imie"
#define SURNAME "Nazwisko"
#define HITS "Trafienia"
#define SHOTS "Rzuty"
#define ESCORTS "Asysty"
#define FOULS "Faule"
#define EFFICACY "Skutecznosc"
#define THIS_MATCH_RESULTS "Skutecznosc calej druzyny w tym meczu to: "
#define ALL_MATCHES_RESULTS "Skutecznosc calej druzyny we wszystkich meczach to: "
#define THIS_MATCH_EFFICACY_TEXT "Skutecznosc zawodnikow w tym meczu to: "
#define THIS_MATCH_EFFICACY_TEXT2 "\nWcisnij [enter], aby przejsc do wynikow nastepnego meczu."
#define ALL_MATCHES_EFFICACY_TEXT "Skutecznosc zawodnikow we wszystkich meczach to: "
#define FCLOSE_ERR "Blad przy zamykaniu pliku."
struct Player {
char Name[MAX_NAME];
char Surname[MAX_SURNAME];
int Hits;
int Shots;
int Escorts;
int Fouls;
float Efficacy;
} VarPlayer[MAX_PLAYERS];
struct MatchStats {
struct Player VarPlayer[MAX_PLAYERS];
float MatchEfficacy;
} VarMatchStats[MAX_MATCHES];
int GetMatchStats(FILE * p_fptr[], struct MatchStats * p_VarMatchStats, char * p_argv);
void ShowMatchStats(struct MatchStats * p_VarMatchStats, int p_argc);
int main(int argc, char * argv[])
{
int i, j;
FILE * fptr[MAX_MATCHES];
if(argc<=1)
{
fprintf(stderr,"%s", ARGC_ERR);
getchar();
return 555;
}
for(i=0; i<argc-1; i++)
if((fptr[i]=fopen(argv[i+1], "r"))==NULL)
{
fprintf(stderr, "%s %s", FOPEN_ERR, argv[i+1]);
getchar();
return i+1;
}
for(i=0, j=0; i<argc-1; i++)
j+=GetMatchStats(fptr, VarMatchStats, argv[i+1]);
if(j!=argc-1)
return 556;
ShowMatchStats(VarMatchStats, argc);
return 0;
for(i=0; i<argc-1; i++)
if(fclose(fptr[i])!=0)
{
fprintf(stderr,"%s %s", FCLOSE_ERR, argv[i+1]);
getchar();
return 0;
}
return 0;
}
int GetMatchStats(FILE * p_fptr[], struct MatchStats * p_VarMatchStats, char * p_argv)
{
int i, j, k;
for(j=0; j<MAX_PLAYERS; j++)
if(fscanf(p_fptr[i],"%*d %s %s %d %d %d %d", p_VarMatchStats[i].VarPlayer[j].Name, p_VarMatchStats[i].VarPlayer[j].Name, p_VarMatchStats[i].VarPlayer[j].Hits, p_VarMatchStats[i].VarPlayer[j].Shots, p_VarMatchStats[i].VarPlayer[j].Escorts, p_VarMatchStats[i].VarPlayer[j].Fouls)!=6)
{
fprintf(stderr,"%s %s" ,FSCANF_ERR, p_argv);
getchar();
return 0;
}
return 1;
}
void ShowMatchStats(struct MatchStats * p_VarMatchStats, int p_argc)
{
int i, j, k;
float team_efficacy;
float all_matches_efficacy;
for(i=0; i<p_argc-1; i++)
{
printf("\n\n%30s%d :\n", MATCH_RESULT_TEXT, i);
printf("%-*s %-*s", MAX_NAME+2, NAME, MAX_SURNAME+2, SURNAME);
printf("%-12s %-8s %-10s %-10s %-14s", HITS, SHOTS, ESCORTS, FOULS, EFFICACY);
for(j=0; j<MAX_PLAYERS; j++)
{
printf("%-*s %-*s", MAX_NAME+2, p_VarMatchStats[i].VarPlayer[j].Name, MAX_SURNAME+2, p_VarMatchStats[i].VarPlayer[j].Surname);
printf("%-12d %-8d %-10d %-10 ", p_VarMatchStats[i].VarPlayer[j].Hits, p_VarMatchStats[i].VarPlayer[j].Shots, p_VarMatchStats[i].VarPlayer[j].Escorts, p_VarMatchStats[i].VarPlayer[j].Fouls);
p_VarMatchStats[i].VarPlayer[j].Efficacy=p_VarMatchStats[i].VarPlayer[j].Hits/p_VarMatchStats[i].VarPlayer[j].Shots;
printf("%-14.2f %%\n", p_VarMatchStats[i].VarPlayer[j].Efficacy);
}
for(k=0; k<MAX_PLAYERS ;k++)
team_efficacy+=p_VarMatchStats[i].VarPlayer[k].Efficacy;
p_VarMatchStats[i].MatchEfficacy=team_efficacy/MAX_PLAYERS;
printf("%s %.2f %s", THIS_MATCH_EFFICACY_TEXT, p_VarMatchStats[i].MatchEfficacy, THIS_MATCH_EFFICACY_TEXT2);
all_matches_efficacy+=p_VarMatchStats[i].MatchEfficacy;
getchar();
}
printf("\n%s %.2f", ALL_MATCHES_EFFICACY_TEXT, all_matches_efficacy/(p_argc-1));
getchar();
return;
}