Newsgroup: it.comp.lang.c++
Titolo: 1 parere please

Salve a tutti..avrei un problema riguardo il seguente programmino esempio:
#include <stdio.h>
#define FAM 4
int i;
short ok;
long paga[FAM];
short mese[FAM];
short anno[FAM];
int continua(); /*Omessa: se 0 esce dal prog, se 1 continua */
void prendi();
int main() /*omessa*/
void prendi()
{
 for(i=0;i<FAM && ok==1;i++)
 {
  printf("\n\nPersona %d, inserisci mese ed anno di nascita: ", i);
  scanf("%d %d", &mese[i], &anno[i]);
  puts("Ora inserisci il tuo stipendio:");
  scanf("%ld", &paga[i]);
  ok=continua();
 }
 for(i=0;i<FAM && ok==1;i++)
 {
  printf("\n\nPersona %d\t %d\t %d\t %ld",i,mese[i],anno[i],paga[i]);
 }
}
Tutto è esatto ma alla stampa finale.. il valore di paga[0] è sempre
inesatto, mentre paga[1],paga[2] etc..mesi e anni  sono corretti.
Esempio: se inserisco come guadagni 1000000,poi 2000000,poi 3000000 quindi
per ultimo 4000000 , mi da il seguente risultato:
persona1 ... 983040 /* paga[0] è sempre errato */
persona2 ... 2000000
persona3 ... 3000000
persona4 ... 4000000
Cosa che non accade se nel ciclo for inizializzo "i=1".
Potete spiegarmi il motivo?
Grazie.
--
               \\\////
               |     |
              (.) (.)
__oOO**( )**OOo___
|******************|
|||||***SNHYPER***|||||
|******************|

  ok=continua();
io preferisco
for(i=0;i<FAM;i++){
   ...
   if (!continua())
       break;
lo trovo piů leggibile ma molti penso non saranno d'accordo.
-- 
                    Marco Barisione (ICQ 84277092)
Se sei interessato alla creazione di it.comp.lang (per i linguaggi di
programmazione senza un gruppo apposito e per i confronti fra i
linguaggi) partecipa alla discussione sul manifesto su it.news.gruppi.

 %hd e %hd.
Si..giusto..dimenticavo.
Ma il problema non me lo da in mese e anno, bensě in paga[0]....


Ma il problema non me lo da in mese e anno, bensì in paga[0]....
Appunto :-)
Penso che scrivi "troppe cose" nella memoria, aggiustando questo
dovresti risolvere tutto ma io non conosco le funzioni di input e
output del C e non so cos'altro dirti.


 Ma il problema non me lo da in mese e anno, bensě in paga[0]....
Ma č proprio uno di quei %d a produrre quell'effetto su paga[0].
Max

 Ma è proprio uno di quei %d a produrre quell'effetto su paga[0].
...ovvero se scrivi un int in uno short i byte in piu' sbordano da
qualche parte. Siccome e' usuale per i compilatori allocare variabili
dichiarate di seguito in zone di memoria contigue molto probabilmente
l'effetto che vedi sono i byte di troppo che vanno a sporcare paga[0].
Ciao,
Nicola

inesatto, mentre paga[1],paga[2] etc..mesi e anni  sono corretti.
Presumo che sia errato il tipo di parametri che tenti di passare alla
printf ( funziona che ha la caratteristica di accettare un numero
indefinito di parametri ma che ha bisogno di conoscere perfettamente
il loro tipo), purtroppo non conosco bene il c e non posso dirti molto
di piů. Ti propongo la versione c++
for(i=0;i<FAM && ok==1;i++)
    {
    std::cout<<"\n\nPersona "<<i<<"\t "<<mese[i]<<"\t "<<anno[i]<<"\t
"<<paga[i];
    }
Il Ghenio
-----
These are my parting words to you:
those who give up are doomed!
-----

Ragazzi grazie a tutti dell'aiuto, mi siete stati molto utili e..scusate
ancora per lo sconfinamento c/c++.
