Dubbio soluzione tema d'esame linguaggio C

maddiii
Ciao a tutti! :)
Ho qualche dubbio riguardo alla soluzione del seguente tema d'esame: "Si realizzi un programma strutturato in linguaggio C che gestisca i punteggi di un torneo di scacchi.
Un file chiamato “partite.txt” contiene i risultati di tutte le partite codificato come segue:

dove:
● i cognomi sono lunghi al massimo 30 caratteri
● 3 punti sono assegnati al vincitore della partita, 1 al perdente e 2 ad entrambi in caso di pareggio
● durante il torneo, ogni giocatore dovrebbe incontrare tutti gli avversari.

Al torneo possono partecipare un massimo di 10 giocatori; il numero di giocatori non è noto a priori.
Il programma deve:
● analizzare il contenuto del file e verificare che ogni giocatore abbia incontrato tutti gli altri giocatori
● in caso affermativo:
○ dire quanti giocatori hanno partecipato al torneo
○ indicare se un determinato giocatore il cui nome viene ricevuto come parametro da linea di comando si è classificato primo (anche in caso a pari merito)"


La prima parte della soluzione è:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_COGNOME      30
#define MAX_GIOCATORI   10

typedef struct {
    char cognome[MAX_COGNOME];
    int punti;
    int partite;
} Giocatore;


int main(int argc, char* argv[]) {
    	Giocatore torneo[MAX_GIOCATORI];
	char cognome1[MAX_COGNOME],cognome2[MAX_COGNOME];
	int punti1, punti2;
    	FILE* fp;
	char riga[(MAX_COGNOME+1)*2+5];
	int numgiocatori = 0;
	int trovato, i;
while (fgets (riga, (MAX_COGNOME+1)*2+4, fp) != NULL) {
		sscanf (riga, "%s %s %d %d",cognome1, cognome2, &punti1, &punti2);
		
		trovato = 0;
		for (i=0 ; i< numgiocatori && trovato == 0; i++) {
			if (strcmp(cognome1,torneo[i].cognome) == 0) {
				trovato = 1;
			}
		}

		if (trovato == 1) {
			torneo[i-1].partite++;
			torneo[i-1].punti += punti1;
		} else {
			strcpy (torneo[numgiocatori].cognome, cognome1);
			torneo[numgiocatori].punti = punti1;
			torneo[numgiocatori].partite = 1;
			numgiocatori++;
		}


La cosa che non riesco a capire è perchè quando trovato=1 i punti e le partite vengono aggiornati alla posizione i-1 e non alla posizione i. Qualcuno riesce ad aiutarmi? Grazie!

Risposte
apatriarca
Scrive i-1 perché invece di uscire immediatamente dal ciclo con qualcosa come un break fa uso di una variabile che viene verificata solo al ciclo successivo dopo aver incrementato il contatore. Hai insomma che dopo aver eseguito trovato=1 viene incrementato i e poi si verifica nella condizione del ciclo se la condizione trovato == 0 è vera.

maddiii
ok, grazie!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.