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

    [C] Problema Caricamento e Shuffle di un deck in C

    Salve sto lavorando ad un programma, un gioco di carte in cui le carte sono composte da un enumerazione corrispondente al seme e una frase, ovvero la didascalia della carta il deck � allocato su array dinamico e viene letto da un file.txt. Il problema � che non sono sicuro che la lettura sia andata a buon fine, perch� stampando dal while che permette la lettura, la stampa va a buon fine, ma se lo faccio esternamente adesso, con un for e gli indici stampa 0 per l'enumerazione e nulla per la frase. Questo mi impedisce di verificare se l'array � stata riempita correttamente e se la funzione shuffle svolge il suo dovere. Vi allego la parte del codice in questione, aiutatemi!
    codice:
    void printArray (Card deck[], int n){
        int i;
        for (i = 0; i < n; i++){
            printf("%u\t%s  ", deck[i].type, deck[i].phrase);
        printf("\n");
        }
    }
    codice:
    void deckCreationMedium(Card* deck){
        FILE * fp = fopen("---", "r+");
        deck = (Card*)malloc(MEDIUM * sizeof(Card));
        if(deck == NULL){
            exit(-1);
        }
        while(!feof(fp)){
            fscanf(fp, "%u %[^\n]s", &deck->type, &deck->phrase );
            //fscanf(fp , "\n");
            #if DEBUG_MODE == 1
                printf("\n%u\t%s", deck->type, deck->phrase);
            #endif
        }
        fclose(fp);
        #if DEBUG_MODE == 0
            printArray(deck, MEDIUM);
        #endif
        if(deck != NULL){
            printf("ok\n");
        }
    }

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Stai inserendo tutti i dati nel primo elemento dell'array allocato dinamicamente:
    deck->type e deck->phrase sono equivalenti a fare deck[0].type e deck[0].phrase.
    Puoi risolvere in 2 modi: tieni un indice per capire dove vai a scrivere o incrementi il puntatore per scorrere l'array.

    In ogni caso se conosci a priori la dimensione del mazzo quello non è il modo corretto di leggere il file, infatti così non consideri i casi di errore in cui ci siano più o meno elementi.

    Un altro "errore" è che la tua funzione non restituirà nulla al main. Per allocare un array in quel modo o lo ritorni come valore della funzione o prendi come parametro un puntatore "extra":

    codice:
    void deckCreationMedium(Card **deck) {
      Card *ret = (Card *)malloc(MEDIUM * sizeof(Card));
      //...
      //...
      *deck = ret;
    }
    
    //main
    Card *deck;
    deckCreationMedium(&deck);
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Perdona se ti rispondo solo ora ma il giorno stesso eri riuscito a sbloccarmi, grazie mille bascini!

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.