Switch Case und Funktionen



  • Ah, das ist doch mal was handfestes :).
    Danke ich nehme mir die Tips zu Herzen und model das Programm weiter um.
    Danke MFG



  • Wenn du willst das der Benutzer für die Oktalzahlen 0 drückt sollte das case so aussehen:

    switch(Auswahl)
    {
    case '0':
        Okt();
    break;
    }
    

    Das gilt aber nur wenn Auswahl vom Typ char ist, ist es ein Integer muss die 0 ohne '' geschrieben werden.

    Ein kleiner Tipp: Auch wenn es mühsamer ist, arbeite lieber das Tutorial durch. Du wirst damit mehr lernen als wenn du einfach drauflos programmierst und dir die Wissensfetzen zusammenklaubst. Spätesten wenn du den Code erklären musst wird dir das weiterhelfen.
    Und benutz bitte die Code Tags 😉

    Ansonsten viel Erfolg! Was studierst du denn?



  • Die einfachste Variante wäre IMO den Benutzer Zahlen eingeben zu lassen.
    10 für Dezimal, 8 für Oktal und 16 für Hexadezimal. Dann könntest du einfach switch verwenden.

    Alternativ könntest du den Benutzer natürlich auch Strings eingeben lassen, wie du es in deinem Programm versuchst. Allerdings müsstest du dann a) Dinge einsetzen die du vermutlich noch nichtmal kennst (Strings eben) und b) könntest du kein switch() mehr verwenden, sondern müsstest die einzelnen Fälle mit "if" testen.

    Wenn es die Aufgabenstellung erlaubt, würde ich dir also raten, Zahlen zu verwenden.

    Der Rest der Aufgabe wird deutlich schwerer, also "verschwende" hier so wenig Zeit wie möglich 😉



  • Danke für die guten Tips und der kleine Umrechner läuft jetzt schon mal ganz gut.

    Wo jetzt schon das Wort String gefallen ist:
    Wie sieht es aus wenn man in der Konsole direkt eine Aufgabe stellen möchte.
    z.b. 2*12+10/2 Kann man sowas mit einen String einlesen und dem C++ Programm zur Verfügung stellen? Oder ist ein array bzw vektor dabei leichter zu fertigen?


  • Administrator

    #include <string>
    #include <iostream>
    
    int main()
    {
      // Eine Zeile einlesen:
      std::string line;
      std::getline(std::cin, line);
    
      // Ein Wort einlesen, also Zeichen bis zum nächsten Whitespace:
      std::string word;
      std::cin >> word;
    }
    

    Referenz:
    http://www.cplusplus.com/reference/
    http://www.cplusplus.com/reference/string/

    Grüssli



  • Dravere schrieb:

    #include <string>
    #include <iostream>
    
    int main()
    {
      // Eine Zeile einlesen:
      std::string line;
      std::getline(std::cin, line);
    
      // Ein Wort einlesen, also Zeichen bis zum nächsten Whitespace:
      std::string word;
      std::cin >> word;
    }
    

    Verwende

    using namespace std;
    

    Dann brauchst Du std:: nicht überall hinzuschreiben.


  • Administrator

    C++Fan 2009 schrieb:

    Verwende

    using namespace std;
    

    Dann brauchst Du std:: nicht überall hinzuschreiben.

    Wie ich schon mehrmals gesagt habe, finde ich so eine Empfehlung eine ganz schlechte Idee. Wieso soll man immer gleich alle Namensräume aushebeln? Erst recht bei so einem kleinen Code? Ein paar mal mehr std:: hinschreiben, schadet wirklich keinem.
    Ich bin geneigt dieses Vorgehen langsam als eine Unsitte zu bezeichnen 😉

    Naja, aber wenn schon, dann nicht in den globalen Namensraum rein, sondern zum Beispiel so:

    // ...
    
    int main()
    {
      using namespace std;
    
      // ...
    }
    

    Grüssli



  • Die Sache mit den using namespace std, als Teil einer Funktion hab ich noch gar nicht gesehen. In den ganzen Vorlesungen und Übungen wurde das immer für den kompleten Code deklariert.
    MFG



  • blade1982 schrieb:

    Die Sache mit den using namespace std, als Teil einer Funktion hab ich noch gar nicht gesehen. In den ganzen Vorlesungen und Übungen wurde das immer für den kompleten Code deklariert.

    Wahrscheinlich auch gerade noch in Headern, damit man wenigstens konsequent faul bleiben kann. Nur würde ich davon abraten, da man damit schneller zu Namensproblemen kommt, als man denkt. Man leert den gesamten Namensraum aus, und das in allen inkludierenden Dateien.

    Ich stimme Dravere zu, ein wenig std:: finde ich nicht schlimm. Wenn man dann noch mit mehreren Bibliotheken arbeitet, sieht man auch gerade, woher ein Bezeichner kommt. Aber das muss man natürlich selbst wissen; wenn man using namespace verwendet, dann am besten so lokal wie möglich.



  • Cool, also der String ist jetzt schon mal drin.
    Ich habe es zwar nicht ganz so gemacht wie ihr das vorgeschlagen habt, aber mal ein paar Befehle sehen ist da für mich schon sehr hilfreicht und natürlich die Links dazu.

    Wenn man nun erstmal den Sting eingelesen hat kann man ja nun erstmal nicht wirklich berechnen, es handelt sich dabei um eine reine Zeichenkette.
    Kann man diesen String in ein Array übeführen oder gleich die Eingabe in ein Array schreiben lasssen?.
    Nach meiner Ansicht wäre ein Array besser geeignet weil dort die Zahlen von den Zeichen getrennt sind.



  • Du kannst auch in einem string ganz einfach auf die einzelnen Zeichen zugreifen..

    std::string s ( "hallo" );
    std::cout << s [ 4 ]; // o
    


  • Folgendes Problem ist grade bei mir Aufgetretten:
    Es geht nach wie vor um ein kleines Rechenprogramm.
    Ich lass über die Konsole den User eine Rechenaufgabe stellen, das Programm hat danach genau zwei Vektoren:
    double zahlen [1, ,3, ,5, ,....]
    char Zeichen[ ,+, ,/, ,*,....]
    Die beiden Vektoren übereinander gelegt sollen dann eine Rechenaufgabe ergeben.
    Probleme sind jetzt:!
    1. Ich muss den Buchstaben 'e' im Vektor char Zeichen finden, aber wie?
    2. Wenn aus der Kombination von den beiden Vektoren die Zeichen /0 hinter einander stehen das Programm stopen und eine Fehlermeldung ausgeben.

    Hab ihr dafür Iden ? Ich hab leider keine wirklch guten:(

    danke schon mal


Anmelden zum Antworten