Problema con puntatore a struttura lista

Pubblicità

bembem85

Nuovo Utente
Messaggi
23
Reazioni
0
Punteggio
25
Salve eccovi il mio codice:

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 50



struct cella1{
        char nome_giocatore1[15];
        char frase1[30];
};

struct cella2{
        char nome_giocatore2[15];
        char frase2[30];
};
        
char memorizza_frase1_file1(char []);
char memorizza_frase2_file2(char []);

int main()
{
    struct cella1 *puntatore1; struct cella2 *puntatore2;
    char nomeUtente[2][15],stringa[MAX],frase[2][30],stringa_scritta[MAX];
    int i, j,len,cmp,esci,tentativi[2];
    
    FILE *soluz1,*soluz2;
    
    puntatore1 = malloc(sizeof(struct cella1)); puntatore2 = malloc(sizeof(struct cella2));
    
    for (i = 0; i < 2; i++){
            printf("\n Inserire il nome del giocatore %d: ",i+1);
            fflush(stdin);
            scanf("%s",&nomeUtente[i]);
    }
    for (i = 0; i < 2; i++){
        printf("Bene ora %s digiti la sua frase: \n",nomeUtente[i]);
        fflush(stdin);
        gets(frase[i]);
        if (i == 0){
              memorizza_frase1_file1(frase[i]);
              strcpy(puntatore1->frase1,frase[i]);
              strcpy(puntatore1->nome_giocatore1,nomeUtente[i]); }
        else{
              memorizza_frase2_file2(frase[i]);
              strcpy(puntatore2->frase2,frase[i]);
              strcpy(puntatore2->nome_giocatore2,nomeUtente[i]); }     
    }
    tentativi[0] = tentativi[1] = 0;
    system("cls");    
    int n = 0;
        do{
            esci = 0;
                printf("Giocatore %s [tentativi: %d], inserisci frase per verificare se e' uguale:\n\n>",nomeUtente[n],tentativi[n]);
                if(n == 0){   
                    soluz1 = fopen("Soluzione2.txt","r");
                    fgets(stringa,MAX,soluz1);
                    len = strlen(stringa);
                    strncpy(puntatore2->frase2,stringa,len);  
                    fflush(stdin);  }
                else{
                    soluz2 = fopen("Soluzione1.txt","r");
                    fgets(stringa,MAX,soluz2);
                    len = strlen(stringa);
                    strncpy(puntatore1->frase1,stringa,len);
                    fflush(stdin);  }
                gets(stringa_scritta);
                fflush(stdin);
                if (n == 0) cmp = strcmp(puntatore2->frase2,stringa_scritta);
                else        cmp = strcmp(puntatore1->frase1,stringa_scritta);
                if(cmp == 0) {
                   printf("Bravo %s hai indovinato la soluzione!!!\n\n",nomeUtente[n]); system("pause"); break; 
                }    
                else{
                        printf("Non hai indovinato la soluzione\n\n");
                        if (n == 0){
                          tentativi[0]++;
                          if (tentativi[0]>2){
                            printf("Giocatore %s: hai superato i max 2 tentativi!",nomeUtente[n]); n=1; esci = 0;
                          }    
                        }    
                        else{
                             tentativi[1]++;
                             if (tentativi[1]>2){
                                printf("Giocatore %s: hai superato i max 2 tentativi!",nomeUtente[n]); n=0; esci = 0;
                             } 
                        }     
                }sleep(2000);
        }while (tentativi[0] != 3 || tentativi[1] !=3 || esci == 0);                 
}
char memorizza_frase1_file1(char frase1[30])
{
     FILE *soluzione1;
     soluzione1 = fopen("Soluzione1.txt","w");
     fprintf(soluzione1,frase1);
     fclose(soluzione1);
}

char memorizza_frase2_file2(char frase1[30])
{
     FILE *soluzione2;
     soluzione2 = fopen("Soluzione2.txt","w");
     fprintf(soluzione2,frase1);
     fclose(soluzione2);
}

vorrei fare come descritto nel disegno allegato.

Grazie a chi mi darà una mano.
Cordiali Saluti. Mi servirebbe per terminare il progetto entro domani grazie....a chi mi darà una mano ancora.
 
Ciao...

Da quello che ho visto (letto velocemente) sembra la gestione di una normale lista a doppi puntatori, ma dal codice che hai allegato ho qualche dubbio che ti sia chiaro il funzionamento e l' uso di queste strutture...

ipotizza di avere una struttura così :

typedef struct
{
char nome_giocatore[15];
char frase[30];
Cella* prev;
Cella* next;
} Cella;


dichiarerai variabili del tipo

Cella c1, c2;

poi per creare la lista aggancerai i puntatori di un elemento all' altro elemento , tipo così :

c1.next = c2;
c2.prev = c1;


(così hai messo c2 dopo c1)

spero serva a chiarire :D
 
Si ma....

Grazie intanto per il vostro aiuto però io come avete detto voi nn ho ben capito. Hp postato il codice apposta perchè possiate fare delle modfiche.....cappito? Mi servirebbe urgentemente fino a come ho fatto il codice io funziona e quindi non dovreste altro che inserire un qualcosa come spiegato ne disegno o meglio un punattore ad una nuova lista etc. etc. grazie
 
eh, più che fare delle modifiche sarebbe da debuggare e riscrivere...

A me non sembra che quello che hai scritto implementi una lista, comunque:
i due elementi cella1 e cella2 sono strutture "slegate", allocate separatamente, e non ci sono puntatori che le agganciano.

Mi spiace, ma da programmatore e docente preferisco spiegare le cose per fare arrivare l' altro alla soluzione, piuttosto che darla bella pronta...

:D
 
in pratica dovremmo risolverti noi l'esercizio ... che senso a livello "didattico" avrebbe cio'? non è meglio sbatterci la testa, sudare ma alla fine imparare relamente?

tu spiegaci a parola cosa vuoi fare e cosa hai fatto nel codice (facendo riferimento eventualmente ai frammenti di codice relativi alle "parti" della soluzione che stai cercando di realizzare) e vediamo ti tirarti fuori dal "buco"
 
Ok...

Ok....ho creato due strutture separate per il giocatore 1 e il giocatore 2.
E la frase che digiteranno verrà salvata ciascuno nel file separato e anche nella struttura separata. Quello che mi interessa è come posso aggiungere un puntatore nel campo della struttura di ogni giocatore e ovviamente due puntatori uno per ogni campo struttura e a questo puntatore gli si attacca una lista 1 e una lista 2 dello stesso tipo e cioè che tutte e due separate e doppi puntatori alla frase precedente. Ok?
Non mi sembra facile!!! Grazie.
 
io.....

io studio fuori corso e mi aveva preso voglia di provare e mettermi alla prova con queste maledete strutture mi potreste dare una mano? entro stasera ci riuscireste? graaaazie
 
nel suo messaggio arcovoltaico ti aveva dato una traccia di soluzione molto + che basilare, c'erano già tutte le idee e parte della "pratica" per fare quello che chiedi, prova a guardare bene
 
Pubblicità
Pubblicità
Indietro
Top