Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Partecipazione a una festa
Forum - C/C++ - Partecipazione a una festa

Avatar
matto00 (Normal User)
Rookie


Messaggi: 41
Iscritto: 10/12/2008

Segnala al moderatore
Postato alle 21:42
Domenica, 18/10/2009
Ciao a tutti, da poco programmo in c++ e come primo compito mi e' stato dato un programma che riceve in input il tipo di partecipante e il buono sconto se c'e'.
Il prezzo e' diverso per uomo donna e bambino e deve essere inserito dall'utente solo 1 volta appena avviato il programma, alla fine di ogni inserimento chiede se continuare ad inserire partecipanti oppure deve scrivere a video il numero di partecipanti totali, quelli relativi a donne uomini e bambini e il costo totale piu' quello totale di uomini donne e bambini.

Codice sorgente - presumibilmente C#

  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5. float p,pb,pu,pd,pt;
  6. float ptb,ptu,ptd;
  7. float nb,nu,nd,nt;
  8. float bs;
  9. char t,s;
  10. int index ();
  11. int uomo ();
  12. int donna ();
  13. int bambino ();
  14. int scelta ();
  15.      
  16. int main(int argc, char *argv[])
  17. {
  18.     printf("Inserisci il prezzo base per gli uomini ");
  19.     scanf("%f", &pu);
  20.     printf("Inserisci il prezzo base per le donne ");
  21.     scanf("%f", &pd);
  22.     printf("Inserisci il prezzo base per i bambini ");
  23.     scanf("%f", &pb);
  24.     index();
  25. }
  26.  
  27. int index ()
  28. {
  29.     printf("Inserisci la tipologia di partecipante:\nD.Donna\nU.Uomo\nB.Bambino\n");
  30.     scanf("%c\n", &t);  //Dopo questa lettura si chiude senza neanche chiedere lo sconto
  31.     printf("Inserisci la percentuale di sconto (da 0 a 100)");
  32.     scanf("%f\n", &bs);
  33.     if(t=='D')
  34.                donna();
  35.     if (t=='U')
  36.                 uomo();
  37.     if (t=='B')
  38.                 bambino();
  39. }
  40.  
  41. int uomo ()
  42. {
  43.    p = pu-(pu*(bs/100));
  44.    nu++;
  45.    nt++;
  46.    pt+=p;
  47.    ptu+=p;
  48.    scelta();
  49. }
  50.  
  51. int donna ()
  52. {
  53.    p = pd-(pd*(bs/100));
  54.    nd++;
  55.    nt++;
  56.    pt+=p;
  57.    ptd+=p;
  58.    scelta();
  59. }
  60.  
  61. int bambino ()
  62. {
  63.    p = pb-(pb*(bs/100));
  64.    nb++;
  65.    nt++;
  66.    pt+=p;
  67.    ptb+=p;
  68.    scelta();
  69. }
  70.  
  71. int scelta ()
  72. {
  73.    printf("Continuare ? S/N");
  74.    scanf("%c\n", &s);
  75.    if (s=='S'){
  76.                index();
  77.                }
  78.    else{
  79.         printf("Il numero totale di partecipanti e' %f", nt);
  80.         printf("Di cui %f maschi, %f donne e %f bambini", nu, nd, nb);
  81.         system("PAUSE");
  82.         return EXIT_SUCCESS;
  83.         }
  84. }



Spero sappiate aiutarmi


La gnocca è come la ram, non basta mai (cit.)
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:46
Domenica, 18/10/2009
Testo quotato

Postato originariamente da matto00:

Spero sappiate aiutarmi



A fare cosa, di preciso ?


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 22:02
Domenica, 18/10/2009
Il programma si chiude perchè per acquisire una varibile char devi scrivere
scanf("%s", &t);
mentre tu scrivi
scanf("%c\n", &t);
lo stesso errore è presente quando chiedi se continuare.
(ma questo non è C??)


:)
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 22:12
Domenica, 18/10/2009
Non avevo letto la richiesta nel sorgente ... del resto, quello che si chiede di controllare dovrebbe stare nella richiesta, non sepolto nel codice ...

Comunque, il problema sta nel (solito) fatto che la scanf e' bufferizzata.

Inserisci, dopo ogni scanf, la riga

fflush(stdin);

Per quanto riguarda il tipo di dato char, giuseppe, il flag %c e' corretto, mentre il flag %s si usa con le stringhe, array di char.

Si puo' quindi scrivere

scanf("%c", &t);


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 22:06
Lunedì, 19/10/2009
Ho dimostrato la mia ingnoranza del C!:rofl:


:)
PM Quote