Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [RISOLTO - C++] Problema con IF ed ELSE

    Buonasera! Ho un piccolo problema con la gestione degli IF.
    Dunque, il programma che sto scrivendo è questo:

    codice:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        float fahrenheit, celsius, litri, galimp, galus, lato, apotema, area;
        string sceltaProgramma;
        cout << "\37 Raccoglitore di programmi" <<
        endl << "\37 Autore: Mario Ferraro" <<
        endl << "\37 Versione: 0.1" << endl <<
        endl;
        cout << "Inserisci il numero del programma che vuoi utilizzare fra questi:" <<
        endl << endl << "- Convertitore da Fahrenheit a Celsius (1)" <<
        endl << "- Convertitore da litri a Galimp e Galus (2)" <<
        endl << "- Calcolatore area esagono regolare (3)" <<
        endl << endl << "Numero del programma: ";
        cin >> sceltaProgramma;
        if (sceltaProgramma == "1")
        {
            cout << endl << "Hai scelto il convertitore Fahrenheit/Celsius." <<
            endl << "Inserisci la temperatura in Fahrenheit: ";
            cin >> fahrenheit;
            celsius = (fahrenheit - 32) / 9 * 5;
            cout << endl << "La temperatura equivalente in Celsius \212: " << celsius <<
            endl << endl << endl;
        }
        if (sceltaProgramma == "2")
        {
            cout << endl << "Hai scelto il convertitore Litri/Galimp-Galus." <<
            endl << "Inserisci il valore in litri normali: ";
            cin >> litri;
            galimp = litri / 4.54609;
            galus = litri / 3.785411784;
            cout << endl << "Il valore equivalente in galloni imperiali (Imp Gal) \212: " << galimp <<
            endl << "Il valore equivalente in galloni americani (U.S. Gal) \212: " << galus <<
            endl << endl << endl;
        }
        if (sceltaProgramma == "3")
        {
            cout << endl << "Hai scelto il calcolatore dell'area di un esagono regolare." <<
            endl << "Inserisci la misura del lato: ";
            cin >> lato;
            apotema = lato * 0.866;
            area = (lato * apotema) / 2 * 6;
            cout << "L'area dell'esagono regolare \212: " << area <<
            endl << endl << endl;
        }
        else
        {
            cout << endl << "Errore 0x1: Devi inserire un numero di un programma esistente!" <<
            endl << endl << endl;
        }
        system("pause");
        return(0);
    }
    Il problema è che, quando vado ad eseguire il programma, seleziono un qualsiasi numero di programma e, dopo averlo eseguito e terminato, mi compare la scritta "Errore 0x1: Devi inserire un numero di un programma esistente!", che ho scritto in modo tale da apparire nel caso in cui non fosse stato inserito uno di quei tre numeri.
    Ah, ho iniziato a programmare da poco.
    Grazie!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La

    else

    che hai scritto alla fine, si riferisce solamente alla if piu' vicina (quindi a quella che paragona il valore a "3").

    Quindi, per tutti i valori diversi da "3" viene comunque eseguita ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Quindi, per risolvere il problema dovrei associare ad ogni IF una ELSE?
    Oppure devo cambiare totalmente la struttura?

    (perdona le troppe domande)

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Marigno
    Quindi, per risolvere il problema dovrei associare ad ogni IF una ELSE?
    Non mi pare sia utile ...

    Oppure devo cambiare totalmente la struttura?
    Beh ... pensaci un attimo su ... la programmazione e' prima di tutto, ragionamento ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Hai ragione!
    Comunque, a parte usare i cicli, non saprei...
    Però, se c'è un modo per rinchiudere tutte le IF in un blocco solo per poi sfruttarlo utilizzando la singola ELSE... Va bé, ci penso su.
    Grazie!

    EDIT: okay, risolto.
    Nella seconda e terza IF, ho cambiato l'istruzione con ELSE IF!
    Ora funziona.

    Grazie del sostegno!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.