Oppure

Loading
18/10/09 19:42
matto00
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.

#include <cstdlib>
#include <iostream>

using namespace std;
float p,pb,pu,pd,pt;
float ptb,ptu,ptd;
float nb,nu,nd,nt;
float bs;
char t,s;
int index ();
int uomo ();
int donna ();
int bambino ();
int scelta ();
      
int main(int argc, char *argv[])
{
    printf("Inserisci il prezzo base per gli uomini ");
    scanf("%f", &pu);
    printf("Inserisci il prezzo base per le donne ");
    scanf("%f", &pd);
    printf("Inserisci il prezzo base per i bambini ");
    scanf("%f", &pb);
    index();
}

int index ()
{
    printf("Inserisci la tipologia di partecipante:\nD.Donna\nU.Uomo\nB.Bambino\n");
    scanf("%c\n", &t);  //Dopo questa lettura si chiude senza neanche chiedere lo sconto
    printf("Inserisci la percentuale di sconto (da 0 a 100)");
    scanf("%f\n", &bs);
    if(t=='D')
               donna();
    if (t=='U')
                uomo();
    if (t=='B')
                bambino();
}

int uomo ()
{
   p = pu-(pu*(bs/100));
   nu++;
   nt++;
   pt+=p;
   ptu+=p;
   scelta();
}

int donna ()
{
   p = pd-(pd*(bs/100));
   nd++;
   nt++;
   pt+=p;
   ptd+=p;
   scelta();
}

int bambino ()
{
   p = pb-(pb*(bs/100));
   nb++;
   nt++;
   pt+=p;
   ptb+=p;
   scelta();
}

int scelta ()
{
   printf("Continuare ? S/N");
   scanf("%c\n", &s);
   if (s=='S'){
               index();
               }
   else{
        printf("Il numero totale di partecipanti e' %f", nt);
        printf("Di cui %f maschi, %f donne e %f bambini", nu, nd, nb);
        system("PAUSE");
        return EXIT_SUCCESS;
        }
}


Spero sappiate aiutarmi
aaa
18/10/09 19:46
theprogrammer
Postato originariamente da matto00:

Spero sappiate aiutarmi


A fare cosa, di preciso ?
aaa
18/10/09 20:02
giuseppe93
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??)
aaa
18/10/09 20:12
theprogrammer
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);
aaa
19/10/09 20:06
giuseppe93
Ho dimostrato la mia ingnoranza del C!:rofl:
aaa