Oppure

Loading
03/04/09 6:44
Raghnash
Ciao a tutti. Premetto che ho iniziato con c da qualche settimana e quindi potrei anche commettere errori madornali:-|
Il mio problema sta in questa funzione:

int records (FILE * fp)
{
    
    int h, asd, asd2, sott, min, menur, j;
    nome *nom, *nom2, nom3;
    
    
    do
    {
        
        men:
        rewind(fp);
        min=0;
        h=0;
        system("cls";);
        printf("\n\t\t---RECORDS---\n\n\n\n";);
        sleep(200);
        printf(" [1]Visualizza Record vittorie\n [2]Numero partite giocate\n [3]Resetta lista\n [0]Esci\n\n";);
        fflush(stdin);
        scanf("%d", &menur);
        switch(menur)
        {
            case 1:     while(!feof(fp))
                    {
                        fscanf(fp, "%d %d", &asd, &asd2);
                        sott=asd-asd2;
                        if(sott>min)
                        {min=sott;}
                    }
                     rewind(fp);
                      while(!feof(fp))
                    {
                        fscanf(fp, "%d %d", &asd, &asd2);
                        if((asd-asd2)==min)
                        { fscanf(fp, "%s", nom3);
                         printf("%s Vittorie %d Sconfitte %d\n", nom3, asd, asd2);
                        }
                    }        
            break;
            case 2    :    printf("\nInserire nome del giocatore: ";);
                    nom2=malloc(sizeof(nome));
                    scanf("%s", nom2);
                    while(!feof(fp))
                    {
                        nom=malloc(sizeof(nome));
                        fscanf(fp, "%s", nom);
                        if((strcmp( *nom, *nom2))==0)
                        {
                            ++h;
                        }
                    free(nom);
                    free(nom2);
                    }
                    printf("\n %s ha giocato dall'ultimo aggiornamento %d partite.", nom, h);
                    sleep(2000);
            break;
            case 3:        fclose(fp);
                    if((j=remove("record.txt";))!=0)
                    printf("\n\nERRORE CANCELLAZIONE FILE!\n\n";);
                    system("PAUSE";);
                    exit(1);
            break;
            case 0 :goto end;
            break;
            default: goto men;
            break;
        }
    }while(menur != 0);
    end:
    return 4;
}

Non mi funzionano le prime 2 opzioni :(
Allego tutto il programma nel caso ci fosse bisogno.
Se poi aveste qualche consiglio sono lieto di accettarlo
aaa
03/04/09 9:28
andrea.b89
1 - La prossima volta scrivi il codice dentro il tag code che così viene più ordinato
2 - Dire che non funziona è un pò troppo generico. Magari se riesci specifica che cosa non
funziona.
3 - Puoi fare un esempio di cosa ci può essere scritto all'interno del file?
4 - Poi scrivi come hai definito il tipo nome.

Spero di essere stato chiaro :k:
aaa
03/04/09 9:41
Raghnash
Questo è il programma completo.

Il problema è che appena seleziono l'opzione 1 o 2 le istruzioni, appena il programma è arrivato alla fscanf o al ciclo while, non scorrono e il prgramma si blocca.
Ultima modifica effettuata da Raghnash 03/04/09 9:42
aaa
04/04/09 8:56
lorenzo
prima cosa: non e ripeto NON usare mai i goto, che servono sono ad incasinare il codice e sono inutili visto che ci sono altre soluzioni più chiare per ottenere lo stesso risultato


e poi non funziona oppure ti da degli errori? Io l'ho provato su vc++ e ci sono taaanti errori....anche modificando la sleep dato che quella che hai messo tu è per linux(su che s.o. stai provando?)


cmq ho guardato il codice e:

1)controlla i nomi delle funzioni che alcuni sono sbagliati(recors invece di records)
2)guardati bene come si usa la malloc
La malloc ritorna un puntatore a void per lo spazio allocato di dimensione sizeof(...)
Prima di metterlo nella tuia variabile giocatore devi effettuare un cast così:

giocatore = (nome *)malloc(sizeof(nome));
Ultima modifica effettuata da lorenzo 04/04/09 9:03
aaa
04/04/09 15:54
Raghnash
A me errori nella compilazione e nell'esecuzione non ne da... uso per compilare Mingw e il mio sistema operativo è windows visto che uso anche system ("cls";). Per quanto ai goto e sleep ora li modifico se dici che danno fastidio. In caso mi potreste aiutare a rifare proprio la funzione dei records? Era per allenarsi sui file ma non ho trovato esempi su cui basarmi. Poi una domanda.. Se io già ho dato un tipo al puntatore lo devo ridare quando uso la malloc?
Grazie, io intanto ricomincio a studiare allocazione dinamica e file:d
Ultima modifica effettuata da Raghnash 04/04/09 16:02
aaa