Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C] Problema con programma in C

    Salve a tutti,
    Ho un problema con questo programma.
    Praticamente la riga
    if ((strcmp(team2[i].ruolo, team2[q].ruolo))==0)
    non mi funziona, anche se sono effettivamente identici. Non so proprio cosa fare.
    Per esempio, se il ruolo è 'D' per entrambi, mi restituisce -1.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define N 50
    #define TRUE 1
    #define FALSE 0
    
    int main()
    {
        FILE* f1;
        FILE* f2;
        int i, q, n1, n2, stato, sostituzioni1=0, sostituzioni2=0, giocatori=1;
        float punteggio1=0.0, punteggio2=0.0;
    
        typedef struct
        {
            char nome[N];
            char ruolo[1];
            char voto[10];
        } squadra;
        squadra team1[18];
        squadra team2[18];
    
        if ((f1=fopen("formazione1.txt", "r"))==NULL)
        {
            printf("ERRORE APERTURA FILE: formazione1.txt\n");
            return EXIT_FAILURE;
        }
        if ((f2=fopen("formazione2.txt", "r"))==NULL)
        {
            printf("ERRORE APERTURA FILE: formazione2.txt\n");
            return EXIT_FAILURE;
        }
    
        for (i=0, stato=fscanf(f1, "%s %s", team1[i].nome, team1[i].ruolo); stato!=EOF && i<N; i++, stato=fscanf(f1, "%s %s", team1[i].nome, team1[i].ruolo));
        n1=i;
    
        for (i=0, stato=fscanf(f2, "%s %s", team2[i].nome, team2[i].ruolo); stato!=EOF && i<N; i++, stato=fscanf(f2, "%s %s", team2[i].nome, team2[i].ruolo));
        n2=i;
        fclose(f1);
        fclose(f2);
    
        //assegnazioni voti squadra2
        printf("FORMAZIONE 1\nInserire i voti dei giocatori richiesti\n");
        for (i=0; i<n1; i++)
        {
            printf("%s : ", team1[i].nome);
            scanf("%s", team1[i].voto);
        }
    
        //assegnazioni voti squadra2
        printf("FORMAZIONE 2\nInserire i voti dei giocatori richiesti\n");
        for (i=0; i<n2; i++)
        {
            printf("%s : ", team2[i].nome);
            scanf("%s", team2[i].voto);
        }
        int trovato=FALSE;
        //calcolo punteggi squadra1
        i=0;
        giocatori=1;
        while (giocatori<12 && i<11)
        {
            if (strcmp(team1[i].voto, "x")==0)
            {
                trovato=FALSE;
                if (sostituzioni1<4)
                {
                    for (q=11; q<n2 && !trovato;q++)
                    {
                        if (strcmp(team1[i].ruolo, team1[q].ruolo)==0)
                        {
                            strcpy(team1[i].voto, team1[q].voto);
                            trovato=TRUE;
                            sostituzioni1++;
                        }
                        else strcpy(team1[i].voto, "0");
                    }
                }
                else strcpy(team1[i].voto, "0");
            }
            giocatori++;
            i++;
        }
    
        //calcolo punteggi squadra2
        i=0;
        giocatori=1;
        while (giocatori<12 && i<11)
        {
            if (strcmp(team2[i].voto, "x")==0)
            {
                trovato=FALSE;
                if (sostituzioni2<4)
                {
                    for (q=11; q<n2 && !trovato;q++)
                    {
                        if ((strcmp(team2[i].ruolo, team2[q].ruolo))==0)
                        {
                            strcpy(team2[i].voto, team2[q].voto);
                            trovato=TRUE;
                            sostituzioni2++;
                        }
                        else strcpy(team2[i].voto, "0");
                    }
                }
                else strcpy(team2[i].voto, "0");
            }
            giocatori++;
            i++;
        }
    
        for (i=0; i<11; i++)
            punteggio1+=atof(team1[i].voto);
        printf("PUNTEGGIO SQUADRA 1 : %.1f\n", punteggio1);
    
        for (i=0; i<11; i++)
            punteggio2+=atof(team2[i].voto);
        printf("PUNTEGGIO SQUADRA 2 : %.1f", punteggio2);
    
    
        return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,266
    Il problema dovrebbe stare nel fatto che usi una funzione per le stringhe che non trova mai il NULL per cui il controllo fallische. Nel tuo caso puoi limitarti a controllare un solo carattere.
    Per gli Spartani e Sparta usa spartan

  3. #3
    Quote Originariamente inviata da linoma Visualizza il messaggio
    Il problema dovrebbe stare nel fatto che usi una funzione per le stringhe che non trova mai il NULL per cui il controllo fallische. Nel tuo caso puoi limitarti a controllare un solo carattere.
    Grazie della risposta.
    Dovrebbe quindi bastare if (team[i].ruolo==team[q].ruolo)?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.