|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Dec 2009
Messaggi: 4
|
[C++] struct
Ciao a tutti, sono nuovo della programmazione in c++ e mi sono imbattuto in un problema che non riesco a risolvere.
Codice:
#include <iostream> using namespace std; struct persona { char name[10]; int age; }; struct impiegato { persona anagrafica; float wage; float hour; }; void read_info(impiegato impiegati); void write_info(impiegato impiegati); int main () { int n; cout << "Inserire il numero di impiegati" << endl; cin >> n; impiegato impiegati[n]; for (int i=0; i<n; ++i) { read_info(impiegati[i]); } for (int j=0; j<n; ++j) { write_info(impiegati); } return 0; } void read_info(impiegato impiegati) { cout << "Inserire il nome" << endl; cin >> impiegati.anagrafica.name; cout << "Inserire l'eta'" << endl; cin >> impiegati.anagrafica.age; } void write_info(impiegato impiegati) { cout << endl; cout << "Nome: " << impiegati.anagrafica.name << endl; cout << "Eta': " << impiegati.anagrafica.age << endl; } Codice:
Inserire il numero di impiegati 1 Inserire il nome //input inizio pincopallino Inserire l'eta' 23 //input fine Nome: PLԑ� //output Eta': 0 Il programma viene compilato senza errorri e senza warning. Grazie |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2007
Messaggi: 488
|
Devi usare i puntatori, altrimenti quando passi la tua variabile ad una funzione questa viene COPIATA, quindi in realtà stai modificando una variabile che non è quella che hai nel main ma un altra che risiede in un altra zona della memoria.
Codice:
void read_info(impiegato *impiegati); void write_info(impiegato *impiegati); int main () { int n; cout << "Inserire il numero di impiegati" << endl; cin >> n; impiegato *impiegati = new impiegato[n]; for (int i=0; i<n; ++i) read_info(&impiegati[i]); for (int j=0; j<n; ++j) write_info(&impiegati[j]); return 0; } void read_info(impiegato *impiegati) { cout << "Inserire il nome" << endl; cin >> impiegati->anagrafica.name; cout << "Inserire l'eta'" << endl; cin >> impiegati->anagrafica.age; } void write_info(impiegato *impiegati) { cout << endl; cout << "Nome: " << impiegati->anagrafica.name << endl; cout << "Eta': " << impiegati->anagrafica.age << endl; } |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12846
|
Oppure visto che stai usando C++ (anche se in realtà di C++ non hai usato nulla
![]() Codice:
void read_info(impiegato& impiegati) |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Il problema e' che usi stringhe di dimensione fissa (10 caratteri).
Se cerchi di inserire un nome piu' lungo, i caratteri in piu' "sforano" l'array e, per come e' stato dichiarata la struct, vanno a sovrascrivere le locazioni di memoria relative ai campi successivi. O usi le string del c++, oppure limiti la lettura ai primi 10 caratteri .
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:44.