Void wird nicht beachtet



  • Hallo,

    ich habe das Problem, dass ich für die Schule ien kleines Programm in C++ schreiben soll...nun habe ich folgendes Problem:
    Das Proogramm stellt den Benutzer als erstes vor die Frage ob er Währung oder Temperatur umrechnen möchte. Danach soll eine zweite Abfrage stattfinden...doch egal ob der Benutzer 1 oder 2 wählt...es wird immer die Abfrage für 2 ausgeführt...ich weiss nicht was ich falsch gemacht habe...hier der Code.

    #include <iostream>
    #include <cstdlib>
    #include <conio.h>
    
    using namespace std;
    
    void waehrung();
    void temperatur();
    
    int main(void)
    {
        cout << "Umrechner" << endl
             << " "         << endl
             << "Was wollen sie umrechnen?" << endl
             << " "                         << endl
             << "\t1. Waehrung"             << endl
             << "\t2. Temperatur"           << endl;
    
    char Auswahl = getch();
    
                 if(Auswahl == 1)
                {
                 waehrung();
                }
                 else
                {
                 temperatur();   
                }
    
        cin.sync();
        cin.get();
        return 0;
    }
    
    void waehrung()
    {              
         float euro;
         float dollarE;
    
         cout << " " << endl
              << "Wollen sie Euro in Dollar oder Dollar in Euro umrechnen ?" << endl
              << "\t1. Euro/Dollar" << endl
              << "\t2. Dollar/Euro" << endl;  
    
              char Auswahl2 = getch();
                   if(Auswahl2 == 1)
                   {
                            cout << "Bitte geben sie einen Wert in Euro ein." << endl;
                            cin >> euro;
                            getchar ();
                            dollarE = euro * 1,17072;
                            cout << euro << " Euro sind " << dollarE << " Dollar." ;
                   }   
                   else
                   {
                   float dollar;
                   float euroE;   
                            cout << "Bitte geben sie einen Wert in Dollar ein." << endl;
                            cin >> dollar;
                                 getchar ();
                                 euroE = dollar * 1,17072;
                            cout << dollar << " Dollar sind " << euroE << " Euro." ;  
                   }
    	cin.sync();
        cin.get();
    }
    
    void temperatur()
    {
             cout << " " << endl          
                  << "Wollen sie Celsius in Fahrenheit oder Fahrenheit in Celsius umrechnen ?" << endl
                  << "\t1. Celsius/Fahrenheit" << endl
                  << "\t2. Fahrenheit/Celsius" << endl;
    
             char Auswahl3 = getch(); 
    
                  if(Auswahl3 == 1)
                  {
                  float celsius;
                  float fahrenheitE;
                              cout << "Bitte geben sie einen Wert in Grad Celsius ein." << endl;
                              cin >> celsius;
                              getchar();
                              fahrenheitE = 1.8 * celsius + 32;
                              cout << celsius << " Grad Celsius sind " << fahrenheitE << " Grad Fahrenheit. ";
                  }     
                  else
                  {
                  float fahrenheit;
                  float celsiusE;
                              cout << "Bitte geben sie einen Wert in Grad Fahrenheit ein." << endl;
                              cin >> fahrenheit;
                              getchar();
                              celsiusE = (fahrenheit - 32) / 1.8;
                              cout << fahrenheit << " Grad Fahrenheit sind " << celsiusE << " Grad Celsius.";
                  }
    	cin.sync();
        cin.get();
    }
    

    Danke für eure Hilfe.



  • Void wird nicht beachtet

    Was willst du damit sagen?

    Auswahl ist ein char. Wenn du testen willst, ob du eine 1 eigeben hast, musst du gegen das Zeichen 1 testen:

    if(Auswahl == '1')
    


  • was soll denn dieser Titel?!

    Weißt du was Datentypen sind? Welche kennst du?



  • Danke...ich habe nur die ' Zeichen vergessen.


  • Mod

    Fließkommazahlen sind der denkbar schlechteste Datentyp für Geldbeträge. Rechne als einfache Alternative am besten in (ganzen) Cent, Zehntelcent, oder ähnlichem.

    cin.sync() wird auf vielen Systemen schlicht gar nichts tun.

    dollar * 1,17072 ist nicht gleich dollar * 1.17072 , sondern das Ergebnis ist 17072 .

    Und gewiss noch vieles andere, die zufällige Einrückung des Codes macht ihn unnötig schwer lesbar, daher habe ich ihn nur stellenweise überflogen.



  • SeppJ schrieb:

    dollar * 1,17072 ist nicht gleich dollar * 1.17072 , sondern das Ergebnis ist 17072 .

    Das Ergebnis ist dollar.


  • Mod

    Jockelx schrieb:

    SeppJ schrieb:

    dollar * 1,17072 ist nicht gleich dollar * 1.17072 , sondern das Ergebnis ist 17072 .

    Das Ergebnis ist dollar.

    So wie ich es geschrieben habe, stimmt das schon. Das Ergebnis des Ausdrucks dollar * 1,17072 ist 17072 . Aber der Seiteneffekt von

    euroE = dollar * 1,17072;
    

    ist, dass euroE hinterher den Wert von dollar hat, obwohl der Gesamtausdruck den Wert 17072 hat (der aber verworfen wird). Operatorpräzedenz 😃



  • Neurot schrieb:

    was soll denn dieser Titel?!

    Für viele C oder C++ Anfänger ist 'void' ein Synonym für "Funktion", da sie meinen, weil dieses da steht, wäre das der Name dafür (so wie "function" oder "func" o.ä. bei anderen (Skript)Programmiersprachen).

    Wahrscheinlich wird demnächst dazu dann 'auto' gesagt (wenn sich diese Schreibweise durchsetzt - auch wenn ich persönlich davon nicht so viel halte):

    auto X() -> int;
    


  • Inko schrieb:

    Danke...ich habe nur die ' Zeichen vergessen.

    Vergessen... genau... vergessen 😃
    Bin schon gespannt auf deinen nächsten Thread.


Log in to reply