Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    19

    [c] Problema a stampare typedef struct

    Ciao a tutti, vorrei chiedere se qualcuno mi può aiutare in questa cosa semplice..vorrei stampare gli elementi di Istituto...
    So che probabilmente è un errore da scemi ma sto cercando di imparare ma in alcune cose mi blocco..
    Questo è il codice, ma non funziona, stampa dei caratteri strani



    #include <stdio.h>
    #include <string.h>

    #define SIZE 300
    #define CARATT 256

    typedef struct {
    int cod_studente;
    char nome [CARATT];
    char cognome [CARATT];
    char classe[CARATT];
    double media_voti;
    int condotta;
    }Istituto;

    main (){

    int i;
    Istituto Is[300]= {{2101, "Marco", "Rossi","1A",7.00,6}};

    printf("Codice studente %d\n",Is[SIZE].cod_studente);
    printf("Nome: %s\n", Is[SIZE].nome);
    printf("Cognome: %s\n", Is[SIZE].cognome);
    printf("Classe: %s\n", Is[SIZE].classe);
    printf("Media: %f\n", Is[SIZE].media_voti);
    printf("Condotta: %d\n", Is[SIZE].condotta);
    system("PAUSE");
    }

  2. #2
    Se dichiari un vettore di 300 elementi gli indici vanno da 0 a 299, per cui con Is[SIZE] (ossia Is[300]) stai andando ad accedere ad un elemento non valido...
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    19
    grazie per la risposta mi hai fatto scoprire una cosa nuova...quindi devo mettere 299 al posto di 300 cosi?

    Istituto Is[299]= {{2101, "Marco","Rossi","1A",7.00,6}};

    oppure devo mettere:
    Istituto Is[300]= {{2101, "Marco","Rossi","1A",7.00,6}};

    però anche mettendo cosi , sia nel primo che nel secondo caso, non va..

  4. #4
    No, l'esatto opposto... al momento della dichiarazione va bene 300, è dopo (quando accedi agli elementi) che non devi superare il 299...
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    19
    ok grazie, però comunque non riesco a far stampare gli elementi esatti, mi stampa dei simboli, come delle faccine nel campo cognome, dei punti di domanda, pipe, slash ecc

  6. #6
    In quell'inizializzazione hai inizializzato il primo elemento (ovvero Is[0]), quindi dovrai stampare i suoi membri, non quelli del trecentesimo elemento.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    19
    Originariamente inviato da MItaly
    In quell'inizializzazione hai inizializzato il primo elemento (ovvero Is[0]), quindi dovrai stampare i suoi membri, non quelli del trecentesimo elemento.
    hai ragione..infatti cosi va

    #include <stdio.h>
    #include <string.h>

    #define SIZE 300
    #define CARATT 256

    typedef struct {
    int cod_studente;
    char nome [CARATT];
    char cognome [CARATT];
    char classe[CARATT];
    double media_voti;
    int condotta;
    }Istituto;

    main (){

    int i;

    Istituto Is[]= {{2101, "Marco","Rossi","1A",7.00,6}};

    printf("Codice studente %d\n",Is[0].cod_studente);
    printf("Nome: %s\n", Is[0].nome);
    printf("Cognome: %s\n", Is[0].cognome);
    printf("Classe: %s\n", Is[0].classe);
    printf("Media: %f\n", Is[0].media_voti);
    printf("Condotta: %d\n", Is[0].condotta);
    system("PAUSE");
    }


    solo che nel momento un cui voglio stampare un altro elemento, ovviamente dopo averlo inizzializzato, dovrò inserire un ciclo for?

  8. #8
    Originariamente inviato da sarama
    solo che nel momento un cui voglio stampare un altro elemento, ovviamente dopo averlo inizzializzato, dovrò inserire un ciclo for?
    Esattamente.
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.