Problema con la struct

di il
25 risposte

25 Risposte - Pagina 2

  • Re: Problema con la struct

    Te l'ho già detto. Senza liste (puntatori e allocazione dinamica) la questione può essere affrontata in maniera inefficiente. Non sarebbe un compito da assegnare senza questo tipo di conoscenze.

    Se devi aggiungere messaggi, ad esempio, quanti ne puoi aggiungere per ogni utente? Non si capisce e non si capisce dove li aggiungi.
  • Re: Problema con la struct

    Ok Grazie.
  • Re: Problema con la struct

    Guarda che la mia era una domanda. Dove inserisci i messaggi? Hai un vettore per inserire i messaggi?

    Anche se non utilizzi l'allocazione dinamica, puoi utilizzare vettori di strutture allocate staticamente.
    Prevedi un vettore di 1000 messaggi e usalo. Ma non vedo il vettore.
  • Re: Problema con la struct

    Buongiorno,qua:
    
    typedef struct {
        Utente elementi[LEN];
        Messaggio elemento[LEN];
        int num_utenti;
        }Lista ;
    
    
    L'ho inserito dentro la struct Lista,anche se forse dovrei creare un'altra struct.
    
    
    Messaggio Inserimento_Messaggio (Lista utent){
        int i;
        char inse;
        for (i=0;i<utent.num_utenti;i++){
            printf("Vuoi inserire un messaggio? \n");
            scanf("%c",&inse);
            if(inse=='s'||inse=='S'){
                printf("Inserisci Autore ");
                gets(utent.elemento[i].autore);
                printf("Inserisci Testo ");
                gets(utent.elemento[i].testo);
                printf("Inserisci Mi_piace ");
                scanf("%d",&utent.elemento[i].mi_piace);
                printf("Inserisci Destinatario ");
                gets(utent.elemento[i].destinatario);
            }
        }
    }
    
  • Re: Problema con la struct

    La struttura Lista si riferisce ad una Lista di Messaggi? E perché è organizzata in quel modo? Spiega perché hai inserito quegli elementi.

    Cosa è num_utenti ?
  • Re: Problema con la struct

    Ok,allora inizialmente era cosi:
    
    #define LEN 100
    
    typedef struct{
    Utente elementi[LEN];
    int num_utenti;
    } Lista;
    
    Ho fatto questo per poter inserire gli utenti, dove Utente elementi[LEN] contiene le struct di ogni utente.

    Inizializzando la funzione di inserimetno_utente ho creato una nuova variabile di tipo Lista (LIsta utent), dopodiché ho usato int num_utenti per poter immettere il numero degli utenti da inserire (con un printf e un scanf), in seguito ho creato un for che si ripete in base al num_utenti inserito.
    Inizializzazione funzione inserimento_utente:
    
    Lista Inserimento_Utente(){
          Lista utent;
          int i;
          printf("Quanti Utenti vuoi inserire?  ");
          scanf("%d",& utent.num_utenti);
          fflush(stdin); 
    
    
    Ciclo di inserimento:
    
       for(i=0;i<utent.num_utenti;i++){
            printf("Inserisci Nome ");
            gets(utent.elementi[i].nome);
            printf("Inserisci Cognome ");
            gets(utent.elementi[i].cognome);
            printf("Inserisci Sesso ");
            gets(utent.elementi[i].sesso);
            printf("Inserisci Giorno ");
            scanf("%d",& utent.elementi[i].giorno);
            fflush(stdin);
            printf("Inserisci Mese ");
            gets(utent.elementi[i].mese);
            printf("Inserisci Anno ");
            scanf("%d",& utent.elementi[i].anno);
            fflush(stdin);
          }
          return utent;
    
    ho inserito (utent.elementi.nome...….) per collegarmi con la struct che contiene la lista degli utenti Utente elementi[LEN] e che interagisce con la struct che contiene i campi dell'utente.

    In seguito l'ho modificato cosi':
    
    typedef struct {
        Utente elementi[LEN];
        Messaggio elemento[LEN];
        int num_utenti;
        }Lista :
    
    Per poter creare la funzione che mi inserisce un messaggio, dove Messaggio elemento[LEN]; contiene le struct Messaggio
    
    typedef struct {
        char autore[MAX];
        char testo[MAX];
        int mi_piace;
        char destinatario[MAX];
    } Messaggio;
    
    Infine ho messo Utente elementi[LEN]; e Messaggio elemento[LEN]; nella stessa struct perché utenti e massaggi devono essere collegati.

    Spero di aver esposto il mio pensiero nel miglior modo possibile.
  • Re: Problema con la struct

    Ma perché 100 utenti nella struttura dei messaggi?
  • Re: Problema con la struct

    Perché l'esercizio mi dice che posso aggiungere fino a un massimo di 100 utenti e ogni utente ha la possibilità di inserire un messaggio quindi sarebbero 100 messaggi, anche se dovrei modificare inserendo una nuova #define per mettere almeno 200 messaggi, dato che ogni utente può inserire anche più messaggi.
    Per struttura di messaggi se intendi questo:
    
    typedef struct {
        char autore[MAX];
        char testo[MAX];
        int mi_piace;
        char destinatario[MAX];
    } Messaggio;
    
    ho messo una #define MAX 85 , per dare ad autore 85 celle di memoria per poter inserire un nome, stessa cosa con testo e con destinatario.
  • Re: Problema con la struct

    Mi dispiace ma la questione non è chiara. I 100 utenti sono quelli che puoi trattare nel tuo esercizio? Se è così dovresti avere un vettore degli utenti del tipo

    #define MAX_USERS 100

    Utente ElencoUtenti[MAX_USERS];

    in cui Utente è il tipo struttura in cui conservi i dati degli utenti.

    Per i messaggi, ogni utente ha la possibilità di inserire un messaggio, ok, ma manca ancora DOVE lo deve inserire il messaggio.
  • Re: Problema con la struct

    Nel mio esercizio ho un archivio massimo di 100 utenti, quindi posso inserirne 2 fino a 100.
    Per ora le struct si presentano cosi':
    
    #define MAX 120
    #define LEN 100
    
    typedef struct { 
        char nome[MAX];
        char cognome[MAX];
        char sesso[MAX];
        int giorno;
        char mese[MAX];
        int anno;
        } Utente;
    
        typedef struct {
        char autore[MAX];
        char testo[MAX];
        int mi_piace;
        char destinatario[MAX];
    } Messaggio;
    
    
    typedef struct {
        Utente elementi[LEN];
        Messaggio elemento[LEN];
        int num_utenti;
        }Lista ;
    
    Come mi stai spiegando dovrei modificare cosi'?
    
    #define MAX 120
    #define LEN 200
    #define MAX_USERS 100
    
    typedef struct { 
        char nome[MAX];
        char cognome[MAX];
        char sesso[MAX];
        int giorno;
        char mese[MAX];
        int anno;
        } Utente;
    
    typedef struct {
        char autore[MAX];
        char testo[MAX];
        int mi_piace;
        char destinatario[MAX];
        } Messaggio;
    
    
    typedef struct {
        Utente ElencoUtenti[MAX_USERS];
        Messaggio elemento[LEN];
        int num_utenti;
        }Lista ;
    
    E Utente ElencoUtenti[MAX_USERS]; contiene la struct Utente che ho inserito sopra giusto?
    Mentre per capire DOVE inserire il messaggio, devo creare una nuova struct che contiene la struct Lista e la struct Messaggio giusto? Oppure ho frainteso?
  • Re: Problema con la struct

    Salve, ribadisco la mia richiesta di assistenza.
    Ho visto tutto quello che ci stava di materiale fornito dal professore durante il corso e questo esercizio posso farlo solo con vettori di strutture allocate staticamente…
    Detto questo vorrei aggiornarvi al meglio su come sto facendo questo programma:
    Nell'esercizio devo inserire un insieme di UTENTI che possono inserire MESSAGGI quindi:
    
    #define MAX 50
    
    typedef struct { 
        char nome[MAX];
        char cognome[MAX];
        char sesso[MAX];
        int giorno;
        char mese[MAX];
        int anno;
        } Utente;
    
        typedef struct {
        char autore[MAX];
        char testo[MAX];
        int mi_piace;
        char destinatario[MAX];
        } Messaggio;
    
    In seguito all'interno del main ho inserito 2 vettori di strutture, uno per contenere gli UTENTI e uno per i MESSAGGI, poi ho implementato uno switch per poter fare le operazioni elencate:
    
    #define MAX_MESSAGE 200
    #define MAX_USERS 100
    int main()
    {
        Utente ElencoUtenti[MAX_USERS];
        Messaggio ElencoMessaggi[MAX_MESSAGE];
    
        int scelta;
    
        while (scelta=menu()){
                  switch(scelta){
                  case 1:
                      system ("CLS");
                      printf("***INSERIMENTO UTENTE***\n\n");
                      system ("PAUSE");
                     break;
                  case 2:
                      system ("CLS");
                      printf("***INSERIMENTO MESSAGGIO***\n\n");
                      system ("PAUSE");
                     break;
                  case 3:
                      system ("CLS");
                      printf("***VISUALIZZAZIONE MESSAGGIO***\n\n");
                      system ("PAUSE");
                     break;
                  case 4:
                      system ("CLS");
                      printf("***ELIMINA MESSAGGIO***\n\n");
                      system ("PAUSE");
                     break;
                  case 0:  return 0;
               }
            }
        return 0;
    }
    
    In seguito ho creato una funzione che restituisce un'intero per poter fare le operazioni dello switch nel main:
    
    int menu(){  
         int scelta;
         printf("***GESTIONE UTENTE***\n");
         printf("[1] Inserisci Utente\n");
         printf("[2] Inserisci Messaggio\n");
         printf("[3] Visualizza Tutti i Messaggi  Utente\n");
         printf("[4] Elimina Messaggio \n");
         printf("[0] Esci\n\n");
         printf(" Scelta: ");
         scanf("%d",&scelta);
    
         while (scelta<0 || scelta>4){    
            printf("Scelta non valida\n");
            printf(" Scelta: ");
            scanf("%d",&scelta);
            return scelta;
            }
            return scelta;
            system ("PAUSE"); 
    
    }
    
    Prototipo della funzione prima del main:
    
    int menu(); 
    
    Ora vorrei implementare una funzione per l'inserimento di un numero finito di utenti che verranno salvati nel vettore:
    Utente ElencoUtenti[MAX_USERS]; 
    .

    Volevo sapere:
    1) Come creare questa funzione senza sbagliare (non chiedo il codice, ma sapere a parole come implementarla).

    2)Ho bisogno di creare una nuova struttura? O mi basta la struttura Utente già creata?


    Preferisco implementare tutto dall'inizio, quindi se i messaggi precedenti costituiscono una scomodità possono essere anche cancellati.
    Grazie per l'aiuto.
Devi accedere o registrarti per scrivere nel forum
25 risposte