Newsgroup: it.comp.lang.c
Titolo: Nuovo esercizio, nuovo problema (Strutture e funzioni) LUNGO

Dopo la grande disponibilità che mi avete dato, mi permetto di postarvi un'
altro dubbio ( abbiate pazienza ma dal 7 luglio in poi, se tutto va bene, vi
romperò di meno).
Non riesco a capire perchè, il seguente programma non funzioni, ho
ricontrollato diverse volte i puntatori e a cosa puntano, ma non riesco a
vedere l' errore.
#include <stdio.h>
/* Paziente */
typedef struct
 {
  char nome[256] ;
  char cognome[256] ;
    int matricola;
    int pressione[2];   // minima e massima
    int temperatura[3]; // temperature della mattina e pomeriggio e sera
    float parcella;       // in euro quello che deve al dottore
 } Paziente;     // Iniziale maiuscola
void inserisci_paziente(Paziente *p1);
void stampa_paziente(Paziente *p1);
int main(void)
{
    Paziente clinica[19];
    Paziente *p1;
    p1 = &clinica[0];
    inserisci_paziente(p1);
    stampa_paziente(p1);
    //stampa_pressione();
    //saldo_clinica();
    fflush(stdin);
    getchar();
}
void inserisci_paziente(Paziente *p1)
{
    printf("inserisci nome: ");
    scanf("%s", p1->nome);
    fflush(stdin);
    printf("inserisci cognome: ");
    scanf("%s", p1->cognome);
    fflush(stdin);
    printf("inserisci matricola: ");
    scanf("%d", p1->matricola);
    fflush(stdin);
    printf("inserisci pressione min e max: ");
    scanf("%d\n%d", p1->pressione[0],p1->pressione[1]);
    fflush(stdin);
    printf("inserisci temperatura mattina, pomeriggio e sera: ");
    scanf("%d\n%d\n%d",
p1->temperatura[0],p1->temperatura[1],p1->temperatura[2]);
    fflush(stdin);
    printf("inserisci parcella: ");
    scanf("%f", p1->parcella);
    fflush(stdin);
}
void stampa_paziente(Paziente *p1)
{
     printf("NOME: %s", p1->nome);
     printf("\nCOGNOME: %s", p1->cognome);
     printf("\nMATRICOLA: %d", p1->matricola);
     printf("\nPRESSIONE MIN: %d\tMAX: %d", p1->pressione[0],
p1->pressione[1]);
     printf("\nTEMPERATURA MATTINO: %d\tPOMERIGGIO %d\tSERA: %d",
p1->temperatura[0],p1->temperatura[1],p1->temperatura[2]);
     printf("\nPARCELLA: %f", p1->parcella);
}
Grazie a tutti.
Ciao Morpheus.

 }
Tralasciando le considerazioni sulla fragilita` del codice qui` sopra
(vedi rant), il mio compilatore mi dice subito:
kronos:/tmp$ gcc -Wall -W -otmp tmp.c
[...]
tmp.c: In function `inserisci_paziente':
tmp.c:40: warning: format argument is not a pointer (arg 2)
tmp.c:43: warning: format argument is not a pointer (arg 2)
tmp.c:43: warning: format argument is not a pointer (arg 3)
tmp.c:47: warning: format argument is not a pointer (arg 2)
tmp.c:47: warning: format argument is not a pointer (arg 3)
tmp.c:47: warning: format argument is not a pointer (arg 4)
tmp.c:50: warning: format argument is not a pointer (arg 2)
Gli argomenti delle scanf devone essere dei *puntatori*:
scanf("%d", p1->matricola);
p1->matricola e` un int, non e` un puntatore. Stesso dicasi per le altre
scanf.
Btw, se anche il tuo compilatore fosse preistorico/buggato/whatever e
non segnalasse dei warning sulle scanf seguendo il programma passo a
passo con un debugger ti saresti subito accorto che il tutto scoppiava
alla scanf indicata sopra.
Luca
-- 
Home: 
http://kronoz.cjb.net
Sbagliare è umano, ma per incasinare davvero le cose serve un computer.

     fflush(stdin);
Non usare fflush(stdin).  
La funzione fflush() non è definita per gli stream di input, ma solo per
quelli di output.  Se vuoi svuotare il buffer in lettura, usa un ciclo del
tipo:
while (getchar()!='\n') 
   ;
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 alla scanf indicata sopra.
Forse perchè non conosco bene Dev C++, ma io l' ho installato e ho lasciato
le impostazioni di default, quindi non credo che sia il compilatore buggato
ma è più probabile chi lo usa (cioè io )
Ciao e grazie
Morpheus

    ;
Chiedo umilmente scusa, hai ragione me lo avevi già detto, ma sono troppo
abituato ad usase sto ... di fflush, che mi viene automatico.
Prenderò provvedimenti.
Ciao e grazie ancora.
Morpheus

 ma č piů probabile chi lo usa (cioč io )
Eh, infatti, era quello che Kronos ti stava dicendo ;-)



Grazie Ragazzi.
Morpheus

 Ok vado a cercarmi una guida per Dev C++
DevC++ invoca, in ultimo, il gcc, quindi ti basta guardare le opzioni del
gcc.


 non serve a nulla.
Io il getchar(); l' ho solo messo per tenermi la console aperta (io
programmo...., oddio ci provo a programmare, sotto win)
Ciao
Morpheus

 gcc.
Controllo subito.
Grazie.
Morpheus

 alla scanf indicata sopra.
scanf("%d", &p1->matricola);
Risolto.
GRAZIE Kronos !!!
Ciao.
Morpheus

 ha scritto:

"Non serve a nulla" nel senso che l'azione di fflush(stdin) e`
indefinita, e spesso equivale a "niente"; il getchar(), quindi, potrebbe
andare a leggere il newline lasciato nel buffer dall'ultima scanf().
Luca
-- 
Home: 
http://kronoz.cjb.net
I went to God just to see
And I was looking at me
Saw heaven and hell were lies
When I'm God everyone dies

Purtroppo io ho EUTELIA "VOLA" ma ti posso dire che non vola un bel 
niente!!
al primo impatto quando feci la richiesta visto qualit&agrave; prezzo, ci 
sono caduto,pensa che la prima operatrice del servizio che mi 
contatt&ograve;,mi garantiva l'attivazione e il tutto nell'arco di 25/30 
giorni....Ti posso solo dire che il ruter e modem mi sono arrivati 100 
giorni dopo e l'attivazione??? loro dicono che &egrave; attivo dal 7 
luglio....ho fatto centinaia di telefonate a questa maledetta azienda che 
ha tutti operatori extracomunitari che non capiscono un ostia....per farla 
breve non va ne l'adsl ne il telefono,per meglio dire,il telefono 
"funziona" per 3 secondi e cade la linea,la rete 4/5 minuti e si 
disconnette...Se poi vuoi sapere la parte pi&ugrave; "divertente": per 
vedere se il telefono andava, abbiamo fatto squillare i nostri 
cellulari(chiaramente senza rispondere) vado sul sito di eutelia mi trovo 
una voce che dice: controlla traffico telefonico effettuato,clicco e mi 
trovo circa &#8364;25 di traffico verso cellulari,quali? Quelli nostri in 
famiglia che abbiamo fatto squillare per provare il telefono.....LASCIA 
PERDERE!!! SPERO CHE QUANTO HO SCRITTO CIRCOLI IN RETE!!
-------------------------------
Messaggio inviato da Forumer.it
http://www.Forumer.it
Crea il tuo forum gratis!