Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C] struct stampa

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    131

    [C] struct stampa

    Salve,
    vorrei realizzare un programma che permetta di registrare tramite una struct il nome e cognome e poi mi stampa il risultato. Questo lo vorrei fare tramite funzioni. La prima parte per l'inserimento sembra che funzioni correttamente, ma quando deve procedere con la stampa, il programma si va in errore. Se non inserisco dei nuovi iscritti, i dati della struct gia' caricati, si vedono correttamente. Dove sbaglio?...grazie

    codice:
    #include <stdio.h>
    struct persona{
     char *nome;
     char *cognome;
     };
    struct persona alunni;
    struct persona *alunniptr;
    void inserimento (struct persona *alunni);
    void stampa (struct persona *alunni);
    int conta=1;  // CONTA I NUOVI ISCRITTI, PARTE DA 1 PERCHE' E'
         // INIZIALIZZATO SOLO CON UNO
    int main (void){
     
     
     alunni.nome="DAVIDE";
     alunni.cognome="ROSSI";
     inserimento (&alunni);
     stampa (&alunni);
     
    return 0; 
    }
     
    void inserimento (struct persona  *allievo ){
     char risp;
     int i;
     
     for(i=0;i<30;i++)
       {
        printf("Vuoi inserire elementi nella lista? (s/n): ");
        scanf("%c",&risp);
        if(risp=='s' || risp=='S')
         {
         printf("\nNome allievo: \n");
         scanf("%s",&allievo[i].nome); 
         printf("\n Cognome allievo: ");
         scanf("%s",&allievo[i].cognome); 
         conta=conta++;  //CONTA I NUOVI ISCRITTI
         }
      else break; 
     
      while(getchar()!='\n') ; 
      }
    }
     
    void stampa (struct persona *allievo){
     
     int y;
     printf("\nstampa matrice\n");
     for (y=0;y<conta;y++){
      printf("%s ",allievo[y].nome);
      printf("%s\n",allievo[y].cognome);
        }
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Se nella struttura prevedi il puntatore alla stringa, prima dell'input devi allocare la memoria per contenerla. E' il classico errore di chi non ha ancora appreso completamente la questione "puntatori".
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    131
    scusa l'ignoranza ma ancora non capisco, io non l'assegno in questo passaggio?
    codice:
    inserimento (&alunni);
    come devo modificare?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    131
    mi viene in mente qualcosa del genere ma è errato
    codice:
     
    scanf("%s",&(*allievo[i]).nome);

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Quote Originariamente inviata da vide91 Visualizza il messaggio
    scusa l'ignoranza ma ancora non capisco, io non l'assegno in questo passaggio?
    codice:
    inserimento (&alunni);
    come devo modificare?
    Mi riferisco a

    char*nome;
    char*cognome;

    che sono due puntatori che utilizzi in


    scanf("%s",&allievo[i].nome);

    e


    scanf("%s",&allievo[i].cognome);

    Ma prima di utilizzarli devi allocare la memoria necessaria per ognuno.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    131
    codice:
    struct persona{
     char *nome[10] ;
     char *cognome[10] ;
     };
    così?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Quote Originariamente inviata da vide91 Visualizza il messaggio
    codice:
    struct persona{
     char *nome[10] ;
     char *cognome[10] ;
     };
    così?

    No, così avresti due vettori di 10 puntatori e non è quello che ti serve. Semmai

    codice:
    struct persona{
     char nome[10] ;
     char cognome[10] ;
     };
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.