PDA

Visualizza la versione completa : [c] Problema a stampare typedef struct


sarama
07-11-2011, 16:03
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");
}

MItaly
07-11-2011, 16:14
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...

sarama
07-11-2011, 16:18
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..

MItaly
07-11-2011, 16:20
No, l'esatto opposto... al momento della dichiarazione va bene 300, è dopo (quando accedi agli elementi) che non devi superare il 299...

sarama
07-11-2011, 16:22
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

MItaly
07-11-2011, 16:27
In quell'inizializzazione hai inizializzato il primo elemento (ovvero Is[0]), quindi dovrai stampare i suoi membri, non quelli del trecentesimo elemento.

sarama
07-11-2011, 16:33
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?

MItaly
07-11-2011, 16:40
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.

Loading