C++ char & mehrere Zeichen



  • Hallo Leute, ich soll für die Schule einen Umrechner programmieren. Man soll eine Ausgangseinheit eingeben können und eine Zieleinheit.

    Nun möchte ich für jede Einheit einfach nur ein Kürzel eingeben müssen:

    cout << "   Millisekunde \t ' ms '" << endl;
        cout << "   ----------------------------" << endl;
        cout << "   Sekunde \t\t ' s  '" << endl;
        cout << "   ----------------------------" << endl;
        cout << "   Minute \t\t ' m  '" << endl;
        cout << "   ----------------------------" << endl;
        cout << "   Stunde \t\t ' h  '" << endl;
        cout << "   ----------------------------" << endl;
        cout << "   Tag \t\t\t ' d  '" << endl;
        cout << "   ----------------------------" << endl;
        cout << "   Woche \t\t ' w  '" << endl;
    

    Den Wert lasse ich in einen char speichern:

    char Ausgangseinheit;
        [...]
        cout << "   Eingabe:\t\t   ";
        cin >> Ausgangseinheit;
    

    Die Abfrage danach mache ich mit einem switch case. Allerdings funktioniert dies bei mir mit der Einheit Millisekunde nicht. Ich nehme an, dass man in einem char auch immer nur 1 Zeichen (character) speichern kann. Für Millisekunde soll man jedoch ' ms ' eingeben können. Wie kann ich dies lösen?

    Danke schonmal im Voraus für die Hilfe!
    Dennis



  • Du kannst bei 'm' noch mal einen Buchstaben auslesen. (Dann mit cin.get()). Oder aber (schöner) du verwendest gleich std::string. Da kannst du zwar kein switch mehr nutzen, aber if else geht ja auch.



  • Danke, aber das hatten wir alles in der Schule noch nicht wirklich 😕 Und wir sollen unbedingt switch case benutzen.

    Ich dachte es gibt vielleicht einen anderen Deklarationstyp der mehrere Buchstaben auslesen kann. Ich kenne da nur int, double und char.. Deklarationstypen dürfen wir auch andere nehmen, die wir nicht im Unterricht hatten, aber den Rest sollen wir halt auf den Unterricht basieren lassen 😕



  • Ich poste hier mal meinen bisherigen Code. Der ist aber noch grad am Anfang, nur für die erste Umwandlung:

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    //========== Deklaration =====================================================//
        char Ausgangseinheit;
        char Zieleinheit;
        char Beenden;
        double Ausgangszahl;
        double Zielzahl;
    
    //========== Ausgabe der Version =============================================//
        cout << endl;
        cout << "   ##########################################" << endl;
        cout << "   #                                        #" << endl;
        cout << "   #            Einheitenrechner            #" << endl;
        cout << "   #                 v 1.0                  #" << endl;
        cout << "   #                                        #" << endl;
        cout << "   ##########################################" << endl;
        cout << endl << endl;
    
    //========== Warten bis Eingabe-Taste gedrückt wird ==========================//
        cout << "   ";
        system("PAUSE");
    
    //========== Löschen des aktuellen Bildschirminhalts =========================//
        system("CLS");
    
    //========== Ausgabe der Version =============================================//
        cout << endl;
        cout << "   ##########################################" << endl;
        cout << "   #                                        #" << endl;
        cout << "   #            Einheitenrechner            #" << endl;
        cout << "   #                 v 1.0                  #" << endl;
        cout << "   #                                        #" << endl;
        cout << "   ##########################################" << endl;
        cout << endl << endl;
    
    //========== Eingabe der Ausgangszahl ========================================//
        cout << "   Bitte geben Sie Ihre Ausgangszahl ein!";
        cout << endl << endl;
        cout << "   Eingabe:\t\t   ";
        cin >> Ausgangszahl;
        system("CLS");
    
    //========== Ausgabe der Version =============================================//
        cout << endl;
        cout << "   ##########################################" << endl;
        cout << "   #                                        #" << endl;
        cout << "   #            Einheitenrechner            #" << endl;
        cout << "   #                 v 1.0                  #" << endl;
        cout << "   #                                        #" << endl;
        cout << "   ##########################################" << endl;
        cout << endl << endl;
    
    //========== Auflistung der verschiedenen Ausgangseinheiten ==================//
        cout << "   Bitte w\x84 \bhlen Sie Ihre Ausgangseinheit aus!";
        cout << endl << endl;
        cout << "   Millisekunde \t ' ms '" << endl;
        cout << "   ----------------------------" << endl;
        cout << "   Sekunde \t\t ' s  '" << endl;
        cout << "   ----------------------------" << endl;
        cout << "   Minute \t\t ' m  '" << endl;
        cout << "   ----------------------------" << endl;
        cout << "   Stunde \t\t ' h  '" << endl;
        cout << "   ----------------------------" << endl;
        cout << "   Tag \t\t\t ' d  '" << endl;
        cout << "   ----------------------------" << endl;
        cout << "   Woche \t\t ' w  '" << endl;
        cout << endl;
    
    //========== Eingabe der Ausgangseinheit =====================================//
        cout << "   Eingabe:\t\t   ";
        cin >> Ausgangseinheit;
    
    //========== Löschen des aktuellen Bildschirminhalts =========================//
        system("CLS");
    
    //========== Ausgabe der Version =============================================//
        cout << endl;
        cout << "   ##########################################" << endl;
        cout << "   #                                        #" << endl;
        cout << "   #            Einheitenrechner            #" << endl;
        cout << "   #                 v 1.0                  #" << endl;
        cout << "   #                                        #" << endl;
        cout << "   ##########################################" << endl;
        cout << endl << endl;
    
        switch(Ausgangseinheit)
          {
            case 'ms':{
                 cout << "   Ihre Ausgangseinheit ist Millisekunde!" << endl;
                 cout << "   Bitte w\x84 \bhlen Sie die gew\x81 \bnschte Zieleinheit aus!";
                 cout << endl << endl;
                 cout << "   Sekunde \t\t ' s  '" << endl;
                 cout << "   ----------------------------" << endl;
                 cout << "   Minute \t\t ' m  '" << endl;
                 cout << "   ----------------------------" << endl;
                 cout << "   Stunde \t\t ' h  '" << endl;
                 cout << "   ----------------------------" << endl;
                 cout << "   Tag \t\t\t ' d  '" << endl;
                 cout << "   ----------------------------" << endl;
                 cout << "   Woche \t\t ' w  '" << endl;
                 cout << endl;
    
                 cout << "   Eingabe:\t\t   ";
                 cin >> Zieleinheit;
    
                 system("CLS");
    
                 switch(Zieleinheit)
                   {
                     case 's':{
                          cout << endl;
                          cout << "   ##########################################" << endl;
                          cout << "   #                                        #" << endl;
                          cout << "   #            Einheitenrechner            #" << endl;
                          cout << "   #                 v 1.0                  #" << endl;
                          cout << "   #                                        #" << endl;
                          cout << "   ##########################################" << endl;
                          cout << endl << endl;
                          cout << "   Ihre Zieleinheit ist Sekunden!" << endl << endl;
                          cout << "   Ihr Ergebnis wird berechnet!" << endl << endl << endl;
                          cout << "   ";
                          system("PAUSE");
                          cout << endl << endl;
                          Zielzahl = Ausgangszahl / 1000;
                          cout << "   Ausgangszahl:\t" << Ausgangszahl << " " << Ausgangseinheit;
                          cout << endl << endl;
                          cout << "   Ergebnis:\t\t" << Zielzahl << " " << Zieleinheit;
                          cout << endl << endl << endl; 
                          cout << "   ";
                          system("PAUSE");
                               }
                          break;
    
                     case 'm':{
                          cout << endl;
                          cout << "   ##########################################" << endl;
                          cout << "   #                                        #" << endl;
                          cout << "   #            Einheitenrechner            #" << endl;
                          cout << "   #                 v 1.0                  #" << endl;
                          cout << "   #                                        #" << endl;
                          cout << "   ##########################################" << endl;
                          cout << endl << endl;
                          cout << "   Ihre Zieleinheit ist Minuten!" << endl << endl;
                          cout << "   Ihr Ergebnis wird berechnet!" << endl << endl << endl;
                          cout << "   ";
                          system("PAUSE");
                          cout << endl << endl;
                          Zielzahl = Ausgangszahl / 1000 / 60;
                          cout << "   Ausgangszahl:\t" << Ausgangszahl << " " << Ausgangseinheit;
                          cout << endl << endl;
                          cout << "   Ergebnis:\t\t" << Zielzahl << " " << Zieleinheit;
                          cout << endl << endl << endl;
                          cout << "   ";
                          system("PAUSE");
                               }
                          break;
    
                     case 'h':{
                          cout << endl;
                          cout << "   ##########################################" << endl;
                          cout << "   #                                        #" << endl;
                          cout << "   #            Einheitenrechner            #" << endl;
                          cout << "   #                 v 1.0                  #" << endl;
                          cout << "   #                                        #" << endl;
                          cout << "   ##########################################" << endl;
                          cout << endl << endl;
                          cout << "   Ihre Zieleinheit ist Stunden!" << endl << endl;
                          cout << "   Ihr Ergebnis wird berechnet!" << endl << endl << endl;
                          cout << "   ";
                          system("PAUSE");
                          cout << endl << endl;
                          Zielzahl = Ausgangszahl / 1000 / 60 / 60;
                          cout << "   Ausgangszahl:\t" << Ausgangszahl << " " << Ausgangseinheit;
                          cout << endl << endl;
                          cout << "   Ergebnis:\t\t" << Zielzahl << " " << Zieleinheit;
                          cout << endl << endl << endl;
                          cout << "   ";
                          system("PAUSE");
                               }
                          break;
    
                     case 'd':{
                          cout << endl;
                          cout << "   ##########################################" << endl;
                          cout << "   #                                        #" << endl;
                          cout << "   #            Einheitenrechner            #" << endl;
                          cout << "   #                 v 1.0                  #" << endl;
                          cout << "   #                                        #" << endl;
                          cout << "   ##########################################" << endl;
                          cout << endl << endl;
                          cout << "   Ihre Zieleinheit ist Tage!" << endl << endl;
                          cout << "   Ihr Ergebnis wird berechnet!" << endl << endl << endl;
                          cout << "   ";
                          system("PAUSE");
                          cout << endl << endl;
                          Zielzahl = Ausgangszahl / 1000 / 60 / 60 / 24;
                          cout << "   Ausgangszahl:\t" << Ausgangszahl << " " << Ausgangseinheit;
                          cout << endl << endl;
                          cout << "   Ergebnis:\t\t" << Zielzahl << " " << Zieleinheit;
                          cout << endl << endl << endl;
                          cout << "   ";
                          system("PAUSE");
                               }
                          break;
    
                     case 'w':{
                          cout << endl;
                          cout << "   ##########################################" << endl;
                          cout << "   #                                        #" << endl;
                          cout << "   #            Einheitenrechner            #" << endl;
                          cout << "   #                 v 1.0                  #" << endl;
                          cout << "   #                                        #" << endl;
                          cout << "   ##########################################" << endl;
                          cout << endl << endl;
                          cout << "   Ihre Zieleinheit ist Wochen!" << endl << endl;
                          cout << "   Ihr Ergebnis wird berechnet!" << endl << endl << endl;
                          cout << "   ";
                          system("PAUSE");
                          cout << endl << endl;
                          Zielzahl = Ausgangszahl / 1000 / 60 / 60 / 24 / 7;
                          cout << "   Ausgangszahl:\t" << Ausgangszahl << " " << Ausgangseinheit;
                          cout << endl << endl;
                          cout << "   Ergebnis:\t\t" << Zielzahl << " " << Zieleinheit;
                          cout << endl << endl << endl;
                          cout << "   ";
                          system("PAUSE");
                               }
                          break;
    
                     default:{
                              cout << "   Falsche Eingabe!";
                              cout << endl << endl << endl;
                              }
                       }
                 break;
    
            default:{
                     cout << "   Falsche Eingabe!";
                     cout << endl << endl << endl;
                     }
          }
    
        cout << "   ";
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    }
    


  • Ihr macht doch nicht switch vor if/else? oO

    #include <iostream>
    #include <string>
    
    int main()
    {
      std::string s;
      std::cin >> s;
      if (s == "ms")
      {
      }
      else if (s == "s")
      {
      }
      else
      {
        // Unbekannt, Fehler
      }
    }
    


  • Nein, wir hatten if/else schon, aber wir sollen switch/case nutzen hat der Lehrer gesagt.

    Und das:

    std::string s;
      std::cin >> s;
    

    hatten wir noch nicht.

    Also strings oÄ.

    Nen Ersatz für char gibt's wahrscheinlich nicht? 😕



  • Die Aufgabe ist mit switch aber nicht, bzw nur sehr umständlich lösbar. Dein Lehrer ist doof.



  • Wem sagst Du das...

    Nunja, wir durften die Einheiten selber wählen, vielleicht habe ich mir auch selber ein Ei gelegt mit den millisekunden.. 😕

    Aufgabe lautet:

    Entwickeln Sie ein C++-Programm, das das Umrechnen von Einheiten ermöglicht:
    - Der Benutzer soll einen Wert eingeben mit einer Ausgangseinheit.
    - Es werden Zieleinheiten angegeben und nach Auswahl entsprechend umgerechnet.
    - Mindestens 6 Einheiten
    - Struktogramm
    - Abgabetermin: Nach den Herbstferien

    Nach Möglichkeit Switch/Case verwenden..

    NACH MÖGLICHKEIT, sehe ich ja jetzt erst O_o

    ABER: Selbst wenn ich es mit If mache, dann kann ich doch trotzdem nur 1 Buchstaben in char speichern? 😕



  • Deshalb der std::string. std::string ist eine Klasse, die dir C++ bereitstellt. Mit std::string kann man Zeichenketten erstellen/bearbeiten/usw.



  • Und wie genau benutze ich das?

    Wozu steht das std::string?

    Ich muss meinem Lehrer halt erklären können was genau ich da benutzt habe.. Und mir komplett jetzt strings anzulernen ist meiner meinung nach etwas zu ausschweifend, oder?



  • std::strings sind ganz einfach zu verwenden:

    cout << "Geben Sie eine Einheit ein!\n";
    string einheit;
    cin >> einheit;
    
    if(einheit == "ms")
        ...
    
    else if(einheit == "kJ")
        ...
    
    else if(einheit == "km/h")
        ...
    
    else
        cout << "Unbekannte Einheit!\n";
    

    Und schreib statt endl in den String ein \n rein. endl gibt nicht nur \n aus, sondern flusht auch noch den Stream. Du willst nur ein \n, also schreib auch \n hin 😉



  • Du kannst aber entweder ein einstelliges Kürzel für Millisekunden festlegen, oder aber die Einheiten als Zahlen 'verschlüsseln' und int - Werte einlesen, wo dann zB 1 für Millisekunden, 2 für Meter, 3 für Tage usw. steht. Und mit den Int- Werten kannst Du auch wieder switch-case machen.

    Du kannst auch den Benutzer strings eingeben lassen, die Du dann im Programm selbst auf eine Tabelle mit int - Werten abbildest, mit deren Hilfe Du wiederum switch - case ausführen kannst.

    Also im Programm festlegen:
    1 = "ms"
    2 = "Meter" (oder einfach "m")
    3 = "Kilo" (oder "kg")

    usw.

    der Benutzer gibt nun "kg" oder sowas ein, Du holst Dir daraufhin den Wert 3 (für ("kg") aus Deiner Tabelle und switchst entsprechend ...

    Ist etwas aufwendiger, kA, ob das was für Dich sein kann.



  • 314159265358979 schrieb:

    std::strings sind ganz einfach zu verwenden:

    cout << "Geben Sie eine Einheit ein!\n";
    string einheit;
    cin >> einheit;
    
    if(einheit == "ms")
        ...
    
    else if(einheit == "kJ")
        ...
    
    else if(einheit == "km/h")
        ...
    
    else
        cout << "Unbekannte Einheit!\n";
    

    Und schreib statt endl in den String ein \n rein. endl gibt nicht nur \n aus, sondern flusht auch noch den Stream. Du willst nur ein \n, also schreib auch \n hin 😉

    Muss ich dieses "std::string" schreiben oder geht auch einfach nur "string" so wie Du es gemacht hast?

    Und Danke für die Hilfe! 🙂
    Und kann ich den String dann theoretisch auch im switch case auslesen oder nur im if/else?



  • Da du oben ein using namespace std; hast, reicht string. Nein, mit switch kann man nur integrale Typen verwenden, also keinen string.



  • *auf die Knie geh und verbeug*

    Dankeschön für Eure wirklich sehr schnelle Hilfe! Ich hoffe ich werde sie nicht nochmal beanspruchen müssen, aber die Homepage ist trotzdem direkt als Favorit gespeichert! 🙂



  • Streng genommen solltest du auch noch ein

    #include <string>
    

    an den Anfang deiner Datei schreiben. Es kann sein, dass der iostream-Header den String-Header einbindet, aber das muss nicht der Fall sein. Deshalb immer die Header einbinden, die du brauchst. 😉



  • PS.: heißt ich kann das so schreiben?

    string Ausgangseinheit;
        string Zieleinheit;
        char Beenden;
        double Ausgangszahl;
        double Ergebnis;
        [...]
        if(Ausgangseinheit == "ms")
          {
           }
    

    Und das ms dann in " " und nicht in ' ' wie bei char? 🙂



  • Genau. Ein char-Literal wird in '' geschrieben, ein String-Literal in "".



  • 314159265358979 schrieb:

    std::strings sind ganz einfach zu verwenden:

    cout << "Geben Sie eine Einheit ein!\n";
    string einheit;
    cin >> einheit;
    
    if(einheit == "ms")
        ...
    
    else if(einheit == "kJ")
        ...
    
    else if(einheit == "km/h")
        ...
    
    else
        cout << "Unbekannte Einheit!\n";
    

    Und schreib statt endl in den String ein \n rein. endl gibt nicht nur \n aus, sondern flusht auch noch den Stream. Du willst nur ein \n, also schreib auch \n hin 😉

    Du weißt aber schon, dass man vorzugsweise compare() nehmen sollte.


  • Mod

    Hinweiser schrieb:

    Du weißt aber schon, dass man vorzugsweise compare() nehmen sollte.

    Begründe das doch mal, wenn du solche Behauptungen aufstellst. Und die Begründung sollte besser gut sein.


Anmelden zum Antworten