<pre id=code><font face=courier size= id=code>
//...
main ()
{
printf ("inserisci numero massimo nomi\n");
scanf ("%d", &Nmax);
Contatore = 0;
while(Contatore < Nmax)
{
printf("Inserisci Nome\n");
// 'Persona' è il tipo, 'x' sono le stutture da riempire, quindi usare 'x' !!!
scanf("%s", &x[Contatore].Nome);
//...
Contatore++;
}
//...
}
</font id=code></pre id=code>
Vedo che fai confusione fra la struttura e il contenuto della struttura.
La struttura si chiama Persona. OK. &Persona non va bene, perché punti al nome e *non* alla locazione di memoria, invece scanf() richiede che punti alla memoria. Quindi devi puntare su 'x', &x.
In C/C++, si dichiara una variabile in questo modo:
TIPO NOME;
TIPO NOME;
TIPO NOME;
Dove TIPO è 'int', 'signed', 'float' etc., e NOME è il nome che assegni alla variabile.
TIPO si riferisce a un typedef nativo oppure personalizzato. I tipi nativi sono 'int', 'long', 'float', mentre quelli personalizzati sono 'UINT', 'Persona', 'ULONG'.
Quindi, se ho dichiarato:
int dwABC;
e poi faccio:
scanf("%d", &int);
è lo *stesso errore* come fare:
scanf("%s", &Persona.Nome);
Invece, si deve fare:
scanf("%d", &dwABC);
e
scanf("%s", &x.Nome);
Seppoi, questa persona è un array, fai:
scanf("%s", &x[n].Nome);
Chiaro il concetto?
Giovanni
---
http://www.y2ksw.com/vbulletin