Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Inizio con strutture

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2015
    residenza
    Italia
    Messaggi
    23

    Inizio con strutture

    Ciao , per la prima volta sto utilizzando le strutture per avviarmi successivamente all'allocazione dinamica. Sto cercando di fare questo esercizio che contiene informazioni anagrafiche di persone (cognome, nome, data di nascita, indirizzo di residenza), per comprendere bene questo argomento. Al momento della compilazione mi dice:
    "|43|error: storage size of 'struttura' isn't known|".
    Potreste aiutarmi a trovare l'errore? Non riesco a venirne a capo !


    codice:
    
    
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define INF 30
    
    
    typedef struct
    {
     int giorno;
     int mese;
     int anno;
    } nascita;
    
    
    typedef struct
    {
     char via[INF];
     int num;
     char pos [5];
     char citta[INF];
     char prov[2];
    } indirizzo;
    
    
    typedef struct
    {
     char cognome[INF];
     char nome[INF];
    
    
    nascita data;
    indirizzo residenza;
    } anagrafica;
    anagrafica Sanag;
    
    
    int main(){
    struct Sanag struttura;
    
    
    printf("***INFORMAZIONE ANAGRAFICHE***\n");
    printf("\n Inserisci nome:\n");
    gets(struttura.nome);
    printf("Inserisci cognome:\n");
    gets(struttura.cognome);
    printf("I dati utente sono:\n");
    printf("%s %s", struttura.nome, struttura.cognome);
    
    
    printf("\nInserisci giorno:\n");
    scanf("%d", struttura.data.giorno);
    printf("Inserisci mese:\n");
    scanf("%d", struttura.data.mese);
    printf("Inserisci anno:\n");
    scanf("%d", struttura.data.anno);
    printf("I dati utenti sono:\n");
    printf("%d/%d/%d", struttura.data.giorno, struttura.data.mese, struttura.data.anno);
    
    
    printf("\nInserisci via:\n");
    gets(struttura.residenza.via);
    printf("\nInserisci numero civico:\n");
    scanf("%d", struttura.residenza.num);
    printf("\nInserisci codice postale:\n");
    gets(struttura.residenza.pos);
    printf("\nInserisci citta':\n");
    gets(struttura.residenza.citta);
    printf("\nInserisci provincia:\n");
    gets(struttura.residenza.prov);
    printf("%s\n%d\n%s\n%s\n%s", struttura.residenza.via , struttura.residenza.num, struttura.residenza.pos, struttura.residenza.citta, struttura.residenza.prov);
    
    
    return 0;
    system("pause");
    }

  2. #2
    Quote Originariamente inviata da melmang Visualizza il messaggio

    codice:
    
    
    codice:
    typedef struct
    {
    ...
     char pos [5];
    ...
     char prov[2];
    } indirizzo;
    
    ...
    Già con una rapida occhiata si nota subito un problema: Quelle due stringhe sono troppo corte
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2015
    residenza
    Italia
    Messaggi
    23
    Sono riuscita ha trovare l'errore e stava nella dichiarazione della variabile Sanag, che è completamente errata infatti la parte corretta è la seguente:

    codice:
    typedef struct{ 
    char cognome[INF];
     char nome[INF];
    nascita data;
    indirizzo residenza;
    } anagrafica;
    
    int main() {
    anagrafica struttura;
    ...
    }
    Inoltre avevo dimenticato le & commerciali quindi non stampava i numeri interi

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2015
    residenza
    Italia
    Messaggi
    23
    Nonostante queste modifiche il programma fino alla data di nascita funziona correttamente quando arriva il momento di inserire la residenza funziona a metà e non riesco a capire il perchè. Comunque il programma corretto è questo:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define INF 30
    
    
    typedef struct
    {
     int giorno;
     int mese;
     int anno;
    } nascita;
    
    
    typedef struct
    {
     char via[50];
     int num;
     char pos [5];
     char citta[20];
     char prov[2];
    } indirizzo;
    
    
    typedef struct
    {
     char cognome[INF];
     char nome[INF];
    
    
    nascita data;
    indirizzo residenza;
    } anagrafica;
    
    
    int main(){
    anagrafica struttura;
    
    
    printf("***INFORMAZIONI ANAGRAFICHE***\n");
    printf("\nInserisci nome:\n");
    gets(struttura.nome);
    printf("Inserisci cognome:\n");
    gets(struttura.cognome);
    printf("I dati utente sono:\n");
    printf("%s %s", struttura.nome, struttura.cognome);
    
    
    printf("\n\nInserisci giorno:\n");
    scanf("%d", &struttura.data.giorno);
    printf("Inserisci mese:\n");
    scanf("%d", &struttura.data.mese);
    printf("Inserisci anno:\n");
    scanf("%d", &struttura.data.anno);
    printf("I dati utenti sono:\n");
    printf("%d/%d/%d", struttura.data.giorno, struttura.data.mese, struttura.data.anno);
    
    
    printf("\n\nInserisci via:\n");
    gets(struttura.residenza.via);
    printf("\nInserisci numero civico:\n");
    scanf("%d", &struttura.residenza.num);
    printf("\nInserisci codice postale:\n");
    gets(struttura.residenza.pos);
    printf("\nInserisci citta':\n");
    gets(struttura.residenza.citta);
    printf("\nInserisci provincia:\n");
    gets(struttura.residenza.prov);
    printf("I dati utenti sono:\n");
    printf("%s\n%d\n%s\n%s\n%s\n", struttura.residenza.via , struttura.residenza.num, struttura.residenza.pos, struttura.residenza.citta, struttura.residenza.prov);
    
    
    system("pause");
    return 0;
    }

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ma che vuol dire "funziona a metà"??
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2015
    residenza
    Italia
    Messaggi
    23
    Nel momento in cui devo inserire la via non mi permette di inserirla, mi passa subito al numero civico. Idem con codice postale e provincia

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Quote Originariamente inviata da melmang Visualizza il messaggio
    Nel momento in cui devo inserire la via non mi permette di inserirla, mi passa subito al numero civico. Idem con codice postale e provincia
    Ecco ... adesso si capisce il problema ...

    Penso sia il problema più discusso sul forum ... quindi cerca sul forum il modo di svuotare il buffer di input dopo avere usato una scanf ...

    P.S. Dato che le stringhe sono terminate da un carattere nullo, la provincia non può essere fatta da 2 caratteri ma almeno da 3
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2015
    residenza
    Italia
    Messaggi
    23
    Grazie per l'informazione e del suggerimento !

Tag per questa discussione

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.