PDA

Visualizza la versione completa : [C] struct stampa


vide91
22-08-2014, 18:14
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




#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);
}
}

oregon
22-08-2014, 18:28
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".

vide91
22-08-2014, 18:50
scusa l'ignoranza ma ancora non capisco, io non l'assegno in questo passaggio?


inserimento (&alunni);

come devo modificare?

vide91
22-08-2014, 20:34
mi viene in mente qualcosa del genere ma č errato


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

oregon
23-08-2014, 00:08
scusa l'ignoranza ma ancora non capisco, io non l'assegno in questo passaggio?


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.

vide91
23-08-2014, 12:51
struct persona{
char *nome[10] ;
char *cognome[10] ;
};

cosė?

oregon
24-08-2014, 10:03
struct persona{
char *nome[10] ;
char *cognome[10] ;
};

cosė?


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



struct persona{
char nome[10] ;
char cognome[10] ;
};

Loading