PDA

Visualizza la versione completa : [C] Errore in stampa data di una struct


lampard8
09-01-2012, 16:22
Salve a tutti. Ho un problema con le struct quando vado a stampare la data. Qualcuno mi pu aiutare? Grazie a tutti anticipatamente ;)

CODICE :
/*
Usare le Struct;
2 Struct: Alunni,Data
Usare le funzioni: Inserimento,Modifica data e per cognome,Stampa,Ordinamento,Ricerca per data e per cognome
*/
#include <stdio.h>
#define MAX 100

typedef struct{
int giorno;
int mese;
int anno;
}data;


typedef struct{
char cognome [25];
char nome [25];
data data_nascita;
float media;
}studente;

// prototipi di funzione
int selezione(int sel);
void inserimento(studente vettstud[],int x);
void stampa(studente vettstud[],int size);

//il programma inizia dalla funzione main
int main()
{int sel,scelta,decisione,x,contr,size,i;
contr=0;

studente vettstud[MAX];
printf("*** Benvenuto nel programma ***\n\n");
printf("Inserisci il numero di studenti da prendere in considerazione (MAX 100) :");
scanf("%d",&size);

if(size > 100)
{
while(size > 100)
{printf("\n\nInserisci il numero di studenti da prendere in considerazione (MAX 100) :");
scanf("%d",&size);
}
}

sel=selezione(scelta);

while(contr==0)
{

switch (sel)
{
case 1:
printf("\n\nQuanti studenti vuoi inserire? :");
scanf("%d",&x);
inserimento(vettstud,x);
break;

case 2:
printf("\n\n*** Stampo gli studenti ***");
stampa(vettstud,size);
break;


case 6:
printf("Esco...");
contr=1;
break;

default:
printf("\nAttenzione! Valore inserito errato!\n");
break;
}
sel=selezione(scelta);
}

system("CLS");
system("PAUSE");
//fine del programma
}


int selezione(int sel)
{
printf("\nProgramma studenti\n\n");
printf("[1].Inserimento studenti\n[2].Stampa studenti\n[3].Ordinamento studenti\n[4].Modifica per data o cognome\n[5].Ricerca per data o per data o per congnome\n[6].Esci dal programma\n\nInserisci la tua scelta :");
scanf("%d",&sel);
return sel;
}

void inserimento(studente vettstud[],int x)
{ int i;
for(i=0;i<x;i++)
{
printf("\nInserisci il cognome del %d studente :",i);
scanf("%s",&vettstud[i].cognome);
fflush(stdin);
printf("\nInserisci il nome del %d studente :",i);
scanf("%s",&vettstud[i].nome);
fflush(stdin);
printf("\nInserisci la data di nascita (gg-mm-aaaa) :");
scanf("%d-%d-%d",&vettstud[i].data_nascita.giorno,&vettstud[i].data_nascita.mese,&vettstud[i].data_nascita.anno);
printf("\nInserisci la media del %d studente:",i);
scanf("%f",&vettstud[i].media);
printf("\n**********\n");
}
printf("\n\nInserimento completato! \n\n");
printf("%d-%d-%d",&vettstud[0].data_nascita.giorno,&vettstud[0].data_nascita.mese,&vettstud[0].data_nascita.anno);
}

void stampa(studente vettstud[],int size)
{ int i;
for (i=0;i<size;i++)
{
printf("\n\t%s",&vettstud[i].cognome);
printf("\t\t\%s",&vettstud[i].nome);
printf("\t\t\%d-%d-%d",&vettstud[i].data_nascita.giorno,&vettstud[i].data_nascita.mese,&vettstud[i].data_nascita.anno);
}
printf("\n\n***Stampa completata!***\n\n");
}

ramy89
09-01-2012, 16:45
Questa funzione:


void stampa(studente vettstud[],int size)
{ int i;
for (i=0;i<size;i++)
{
printf("\n\t%s",&vettstud[i].cognome);
printf("\t\t\%s",&vettstud[i].nome);
printf("\t\t\%d-%d-%d",&vettstud[i].data_nascita.giorno,&vettstud[i].data_nascita.mese,&vettstud[i].data_nascita.anno);
}
printf("\n\n***Stampa completata!***\n\n");
}

Io la trovo corretta, il problema potrebbe essere in altre funzioni.
Che problema ti da in particolare? Se c' un errore fai copia e incolla.
PS: hai dimenticato i tag code.

lampard8
09-01-2012, 17:02
Originariamente inviato da ramy89
Questa funzione:


void stampa(studente vettstud[],int size)
{ int i;
for (i=0;i<size;i++)
{
printf("\n\t%s",&vettstud[i].cognome);
printf("\t\t\%s",&vettstud[i].nome);
printf("\t\t\%d-%d-%d",&vettstud[i].data_nascita.giorno,&vettstud[i].data_nascita.mese,&vettstud[i].data_nascita.anno);
}
printf("\n\n***Stampa completata!***\n\n");
}

Io la trovo corretta, il problema potrebbe essere in altre funzioni.
Che problema ti da in particolare? Se c' un errore fai copia e incolla.
PS: hai dimenticato i tag code.
Quando mettevo il tag code mi usciva tutto il codice su una riga :dh: . Comunque niente errori. Cosa pu essere? :confused:

ramy89
09-01-2012, 17:26
Hai detto che c' un problema con le struct quando vai a stampare le date.Qual' questo problema? output indesiderato? Cosa ti stampa?

lampard8
09-01-2012, 17:30
Originariamente inviato da ramy89
Hai detto che c' un problema con le struct quando vai a stampare le date.Qual' questo problema? output indesiderato? Cosa ti stampa?
Si. Output indesiderato. Mi stampa dei numeri molto alti che non centrano con la data.

ramy89
09-01-2012, 17:50
Adesso non so se potrebbe esserci un altro problema, ma nella inserisci:


void inserimento(studente vettstud[],int x)
{ int i;
for(i=0;i<x;i++)
{
printf("\nInserisci il cognome del %d studente :",i);
scanf("%s",&vettstud[i].cognome);
fflush(stdin);
printf("\nInserisci il nome del %d studente :",i);
scanf("%s",&vettstud[i].nome);
fflush(stdin);
printf("\nInserisci la data di nascita (gg-mm-aaaa) :");
scanf("%d-%d-%d",&vettstud[i].data_nascita.giorno,&vettstud[i].data_nascita.mese,&vettstud[i].data_nascita.anno);
printf("\nInserisci la media del %d studente:",i);
scanf("%f",&vettstud[i].media);
printf("\n**********\n");
}
printf("\n\nInserimento completato! \n\n");
printf("%d-%d-%d",&vettstud[0].data_nascita.giorno,&vettstud[0].data_nascita.mese,&vettstud[0].data_nascita.anno);
}

Pulisci lo stdin 2 volte ma usi 4 scanf.Prova a usare fflush dopo ogni scanf, il problema potrebbe essere che rimane il carattere '\n' a sporcare il buffer, che viene quindi letto al posto dell' input che digiti.

Loading