|
|||||||
|
|
|
![]() |
|
|
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: 12961
|
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: 13:23.



















