Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    36

    c++ problema valore sentinella

    Salve a tutti, colgo l'occasione per augurare a tutti voi un felice natale.
    Vi propongo il mio SEMPLICE problema:devo creare un programmino che calcoli il rapporto chilometri/litro di benzina mandati dall'untente in input da tastiera.Infine devo fare la media tra tutti i risultati ottenuti.
    Vi propongo il mio codice:
    codice:
    #include <iostream>
    #include <iomanip>
    main()
    {
    using namespace std;
    
    int contatore=0, a, b, somma=0;
    double c, m;
    
    
    while(a != -1)
    {
    cout<<"\ndigita la benzina usata(-1 per terminare): "<<endl;
    cin>>a;
    cout<<"digita i kilometri fatti: "<<endl;
    cin>>b;
    cout<<"\nla benzina usata è: "<<a<<endl;
    cout<<"i kilometri fatti sono: "<<b<<endl;
    c = static_cast< double >(a)/ b;
    somma += c;
    contatore++;
    }
    m= static_cast<double>(somma)/contatore;
    cout<<"\nla media del rapporto benzina/kilometri e' : "<<setprecision(2)
        << setiosflags(ios::fixed | ios::showpoint)<<m<<endl;
    
    return 0;
    }
    Il problema è il seguente, nel momento il cui digito il valore sentinella, che sarebbe "a" e quindi -1, mi continua a far digitare b.Qualcuno riesce a spiegarmi il perchè, e come dovrebbe essere il codice corretto?grazie a tutti.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    L'input di b segue quello di a mentre il controllo avviene al "giro" seguente.
    Quindi il comportamento del programma è corretto.

    Se vuoi che il valore -1 interrompa il ciclo devi testarlo subito dopo l'input con una if.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    36
    codice:
    #include <iostream>
    #include <iomanip>
    main()
    {
    using namespace std;
    
    int contatore=0, a, b, somma=0;
    double c, m;
    
    
    while(a != -1)
    {
    cout<<"\ndigita la benzina usata(-1 per terminare): "<<endl;
    cin>>a;
    if(a==-1)
    break;
    cout<<"digita i kilometri fatti: "<<endl;
    cin>>b;
    cout<<"\nla benzina usata è: "<<a<<endl;
    cout<<"i kilometri fatti sono: "<<b<<endl;
    c = static_cast< double >(a)/ b;
    somma += c;
    contatore++;
    }
    m= static_cast<double>(somma)/contatore;
    cout<<"\nla media del rapporto benzina/kilometri e' : "<<setprecision(2)
        << setiosflags(ios::fixed | ios::showpoint)<<m<<endl;
    
    return 0;
    }
    quindi il codice dovrebbe essere questo?ora però mi da sempre zero quando faccio il calcolo della media, non riesco ad individuaro l'errore.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da aleye
    ora però mi da sempre zero quando faccio il calcolo della media
    Questo è un altro problema.

    Tu accumuli valori double in una variabile intera ... è normale che perdi precisione nel calcolo.

    La variabile somma non può essere intera.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    36
    grazie mille oregon, sono riuscito a risolvere.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.