C++ Grundlagen Tutorial

Поділитися
Вставка
  • Опубліковано 13 гру 2024

КОМЕНТАРІ • 49

  • @sturmente
    @sturmente 4 роки тому +15

    Ich hab gleichzeitig das video laufen lassen eund eine eigende version gemacht und ich wahr 8 min schneller als du. Das heist deine Tutorials haben mir viel gebracht :) einen Like und Abo hast du dir Verdient!

  • @clashquest9874
    @clashquest9874 2 роки тому +4

    Deine C++ Tutorials sind die besten.

  • @torbenschweren2794
    @torbenschweren2794 4 роки тому +7

    Schöne Erklärung. Den Code kann man denke ich auch als Anfänger nachvollziehen und da ist generell nichts falsch dran ;)
    Ich habe 2 kleine Verbesserungsvorschläge:
    1:
    Ich würde den Rechenfunktionen jeweils 2 Parameter übergeben, also z.B. addition(int number1, int number2)
    Dann kann man die menu-Funktion nämlich so aufbauen:
    "Wähle deinen Modus" ausgeben
    Modus einlesen
    "Zahl 1: " ausgeben
    number1 einlesen
    "Zahl 2:" ausgeben
    number2 einlesen
    switch(modus)
    {
    case('1'):
    addition(number1, number2);
    break;
    case('2'):
    ......
    }
    Ich denke man versteht, was ich meine ^^ So wäre das Programm etwas optimaler strukturiert und die Redundanz, dass in jeder Funktion einzeln die Werte eingelesen werden, wäre beseitigt. Außerdem, wenn man nachdenkt, was denn z.B. die Funktion "addition" machen soll, merkt man schnell, dass diese nicht dazu da sein sollte, irgendwas einzulesen. Das ist ein Fehler, der auch mir beim Programmieren passiert, Funktionen sollten wirklich nur das machen, was man von ihnen erwartet. So hättest du auch noch einmal kurz an der Stelle den Nutzen der Funktionsparameter eingehen können ;)
    2:
    Im Switch-Case Statement in deiner menu-Funktion verwendest du im default-Case einen Aufruf auf die Funktion selbst, um das Menü neu aufzurufen. Das funktioniert auch so, ist auch für Anfänger überhaupt nicht wichtig, aber trotzdem möchte ich kurz ansprechen, was dort genau im Hintergrund passiert. Es kann durch diese Vorgehensweise nämlich zu einem StackOverflow führen.
    Den Stack kann man sich vereinfacht so vorstellen:
    Unser Programm beginnt in main() und ruft menu() auf. menu() ruft dann z.B addition() auf.
    Nun kann man sich schon denken, worauf ich hinaus will. Wenn ein Nutzer einige male eine falsche Eingabe macht, sieht der Stack so aus:
    .... menu() -> menu() -> menu() -> menu() -> menu() -> menu() ....
    Nun kann es passieren, dass dieser Stack "zu groß" wird und das Programm zur Laufzeit durch einen StackOverflow abstürzt.
    Die "richtige" Lösung wäre es, das Switch-Case Statement mit einem while-Loop zu umschleifen, welcher erneut ausgeführt wird, wenn die Eingabe falsch war:
    bool validInput = false;
    "Wähle deinen Modus" ausgeben
    Modus einlesen
    "Zahl 1: " ausgeben
    number1 einlesen
    "Zahl 2:" ausgeben
    number2 einlesen
    while(!validInput)
    {
    switch(modus)
    {
    case('1'):
    validInput = true; //Hierdurch wird der loop nicht noch einmal ausgeführt
    addition(number1, number2);
    break;
    case('2'):
    ......
    }
    default:
    "Input not valid" ausgeben
    break;
    }
    Somit wird kein neuer Call auf menu() gemacht und der Stack läuft nicht über.
    Das ist jetzt sehr unwahrscheinlich, weil ein Nutzer natürlich nicht etliche Male hintereinander eine falsche Eingabe machen wird. Trotzdem kann man an der Stelle direkt lernen, was dort passiert, was für Auswirkungen es haben kann und wie man es vermeiden kann.
    Den Stack zu beachten ist natürlich nichts für Anfänger und gehört deshalb auch nicht in dieses Tutorial. Eine kleine Erwähnung, dass dies keine "gute" Lösung ist, wäre aber gut gewesen.
    Ich denke, dass man lernen muss, mit solchen Hürden die sich einem bei C++ in den Weg stellen, umzugehen. C++ ist nun mal nicht einfach und es gibt viel zu beachten. C# und Java wären da anfängerfreundlicher. Wenn einem der Stack schon zu viel ist, dann RAM Management erst recht. Wie gesagt, dann lieber C# und Java, welche auch einen automatischen Garbage Collector haben ;)
    Ich möchte aber auch keinem abraten, C++ zu lernen, wenn er es wirklich möchte. Dann gehört sowas, wie den Stack zu beachten aber dazu.
    Viel Spaß an alle beim Lernen :)

    • @TheTimaay
      @TheTimaay 2 роки тому

      Crazy :D jetzt weis ich auch woher die StackOverflow Website ihren Namen hat. :D :D :D

  • @darknesshdundewhd1086
    @darknesshdundewhd1086 3 роки тому +1

    Ich musste mir das Video ca. 3 mal anschauen ehe es bei mir geklappt hat. Schon faszinierend was so eine fehlende Klammer alles ausmacht.

  • @koainanis5840
    @koainanis5840 4 роки тому +2

    Wieder ein super Tutorial ;)
    Ich habe noch etwas damit rumgespielt und Befehle wie system("cls"); in das menu() eingefügt.
    Dann wird die konsole immer gelöscht und es sieht besser aus... ;)
    Auch bei void printResult habe ich vor dem menu aufruf noch system("PAUSE"); eingefügt, dann wird auf eine eingabe gewartet bevor das menu aufgerufen wird ;)
    Alles in allem habe ich schon viel gelernt ;)

  • @CoreMetalCore
    @CoreMetalCore 5 років тому +1

    Hallo Pilzschaf,
    danke für das Video. Mir ist gerade aufgefallen, dass du bei ca. 24:30 die funktion "menu" in der funktion "menu" selbst aufrufst. hast du das bewusst so gemacht, bzw. kann soetwas Probleme nach sich ziehen? Wäre von selbst nicht drauf gekommen, sowas auszuprobieren :D
    Viele Grüße.

    • @Pilzschaf
      @Pilzschaf  5 років тому +1

      Das ganze nennt sich in der Fachsprache Rekursion und ist in dem Fall eigentlich unnötig. Würde ich heute eher mit einer Schleife lösen. Wirklich Probleme gibt es nicht, außer dass es eine feste Stackgröße gibt und diese irgendwann aufgebraucht ist, wenn du zu tief verschachtelst. Kannst du gerne mal ausprobieren eine Funktion immer wieder selbst aufrufen und mit einer Variablen mitzählen ;)

    • @CoreMetalCore
      @CoreMetalCore 5 років тому +3

      ​@@Pilzschaf
      Danke für die schnelle Antwort :)
      Falls es jemanden interessiert, wie die Umsetzung mit einer Schleife aussehen kann, hier ein Codevorschlag:
      #include
      using namespace std;
      double InputNumber(int number_i)
      {
      double number = 0;
      cout number;
      return(number);
      }
      void PrintSolution(double solution)
      {
      cout

  • @Inf1niteDreams
    @Inf1niteDreams 5 років тому +2

    Hab gerade angefangen deine Videos zu gucken und bevor ich 006 geguckt habe hab ich schon angefangen einen zu schreiben der bei mir aber irgendwie ganz anders aussieht und trotzdem funktioniert :D
    #include
    int main()
    {
    long double Zahl1, Zahl2, Zahl3, Zahl4, Zahl5;
    Zahl5 = 2;
    std::cout

  • @remake2982
    @remake2982 4 роки тому +1

    bei mir funktioniert es nicht wen ich es ausführe steht ich soll zwischen 1,2,3,4 wählen wen ich das mach passiert nichts hat jmd eine Lösung

  • @shadow-viper6996
    @shadow-viper6996 4 роки тому +1

    Super Tutorial, nur leider verstehe ich nicht was das in der Klammer heißen soll.
    getInputNumber(); ODER main(); wann weiß ich, wann ich etwas in die hintere Klammer einsetzen muss, und wann nicht?

    • @Pilzschaf
      @Pilzschaf  4 роки тому +1

      Ich würde empfehlen, einfach noch das nächste Tutorial zum Taschenrechner programmieren anzuschauen. Da wird vermutlich einiges nochmal klarer. Wenn du dann immer noch die Frage hast, darfst du sie gerne nochmal stellen :)

    • @shadow-viper6996
      @shadow-viper6996 4 роки тому +2

      @@Pilzschaf Junge, junge! Das hier ist ein 4 Jahre altes Video und antwortest ja direkt!
      Krasser Support, mach weiter so!

    • @Pilzschaf
      @Pilzschaf  4 роки тому

      Der Kanal ist ja auch noch aktiv. Nur das Video ist etwas älter ;)

  • @andreasdisch6005
    @andreasdisch6005 4 роки тому

    Hallo Pilzschaf,
    eine kurze Frage.
    Wenn man jetzt aber eine negative Zahl als input verwenden möchte als Beispiel man möchte 6 - (-5) rechnen geht das leider nicht. Kann man dieses Problem irgendwie lösen ?
    Vielen Dank schonmal im Vorraus.
    Mach weiter so!

    • @Pilzschaf
      @Pilzschaf  4 роки тому

      Das sollte mit einer negativen Zahl eigentlich genauso funktionieren. Du kannst ja gerne mal mit dem Debugger das cin mit negativen Zahlen testen. Kann sein, dass er eventuell nicht mit Leerzeichen oder so zurecht kommt. Ein entsprechendes Video zu Debugging gibt es auch in der Playlist

  • @sinamaia5521
    @sinamaia5521 5 років тому +2

    Hey Pilzschaf,
    ich weiß nicht wieso aber es lässt sich nicht darstellen weder das Menü noch die Zahlen. Ich habe es richtig abgeschrieben und es sind auch keine Fehler drin.

    • @Infinity_Nightmare
      @Infinity_Nightmare 4 роки тому +3

      kann es sein, dass du unten in "int main" das "menu()" vergessen hast?

    • @Infinity_Nightmare
      @Infinity_Nightmare 4 роки тому

      @enter4u Hattest du genau den gleichen Fehler? Ich sahs eine halbe Stunde dran, bis es mir aufgefallen ist 😁

  • @flakrondemaj8999
    @flakrondemaj8999 2 роки тому

    Wann benutzt man das Void und wann benutzt man nicht das Void sondern diese normale Funktion Bsp.: int getInput(int number)... Das Verstehe ich noch nicht so ganz.

  • @Lennoxo
    @Lennoxo 5 років тому

    Wie kann man die Buchstaben einzeln markieren? 2:44

    • @Pilzschaf
      @Pilzschaf  5 років тому

      Einfach die Shift Taste gedückt halten und dann mit den Pfeiltasten navigieren

    • @Lennoxo
      @Lennoxo 5 років тому

      Danke für die schnelle Antwort

  • @jannis6841
    @jannis6841 6 років тому +1

    Ich bin mir noch nicht ganz so sicher, ob ich char verstanden habe. Könntest du mir es nochmal erklären oder ein Video-Link schicken?

    • @Pilzschaf
      @Pilzschaf  6 років тому +3

      Ein char ist genau 1 Byte groß, hat also einen Wertebereich von -128 bis 127. Deshalb wird er in der Regel benutzt um einen Buchstaben zu speichern. Du kannst dir dazu z.B. mal eine ASCII Tabelle anschauen. Dort kannst du sehen, welche Zahl welchem Buchstaben entspricht. Hier in diesem Fall nutzen wir char eben um unser O bzw. X zu speichern.

  • @juaou7
    @juaou7 2 роки тому

    Wie würde man dass mit Dezimalzahlen machen?

  • @zibu2018
    @zibu2018 2 роки тому

    was genau sagt: '#include ' aus (include heißt ja einbinden/einschließen) aber was heißt das 'iostream'
    Und was sagt genau 'int' aus (pls so einfach wie man es erklären kann)
    und was sagt void aus (ebenso bitte so einfach wie ihr es erklären könnt)

    • @emilyve
      @emilyve Рік тому

      Iostream ist die Bibliothek int ist der typ der in der variable gespeichert Wirtin dem fall Ganzzahlen und void ist dertyp der nichts ausgibt

  • @krabbenverseuchter894
    @krabbenverseuchter894 5 років тому +3

    Bei mir läuft das Video irgendwie nur auf 360P ? Immer wenn ich auf 1080 hochstelle läuft es nicht weiter. Das gleiche war auch schon 4. Tutorial (Bedingungen) so... Jedes andere Video läuft komplett normal..

    • @Str3aT
      @Str3aT 5 років тому

      habe genau das gleiche Problem. man kann diesen "breakpoint" überspringen, allerdings hat man kurz danach dann wieder das gleiche Problem.

  • @matthiasschulz4740
    @matthiasschulz4740 4 роки тому +1

    Bei mir aktzeptiert er keinen leeren char ?

    • @Pilzschaf
      @Pilzschaf  4 роки тому +1

      Tatsächlich kann man nicht "nichts" in einem char speichern. Ist im Video schlecht zu erkennen, aber es wird ein Leerzeichen darin abgespeichert. Also nicht char input = ''; sondern char input = ' ';

    • @matthiasschulz4740
      @matthiasschulz4740 4 роки тому

      @@Pilzschaf Vielen Dank jetzt läuft alles ^^ Super Videos übrigens , Vielen Dank dafür

    • @kd7238
      @kd7238 3 роки тому

      @@Pilzschaf Wie kann ich nach "char input =" dieses Zeichen einfügen finde das nicht. Kannst du mir helfen

    • @walterg8473
      @walterg8473 2 роки тому

      @@kd7238 kannst auch einfach nur: char input; schreiben dann klappt es auch.

  • @gunarknockel9903
    @gunarknockel9903 6 років тому

    Hallo Pilzschaf,
    auch ich finde, dass deine Tutorials sehr gut sind.
    Bei mir funktioniert der erneute Aufruf des menu nicht wie bei dir im Tutorial.
    Habe ich einen Fehler gemacht?
    (Weiterhin muss bei mir eine Funktion immer einen Wert zurückgeben - also ich brauche eine return mit Variable)
    Hier mein Quellcode:
    //Visual Studio Community 2017
    #include
    using namespace std;
    int getInput(int number) {
    cout

    • @Pilzschaf
      @Pilzschaf  6 років тому

      Return ist immer die letzte Anweisung in einer Funktion sprich sobald ein Return ausgeführt wird springt der Rechner aus der Funktion wieder raus. Nachfolgende statements werden also nicht mehr ausgeführt. Wenn du menu() nach dem return result aufrufst wird es quasi nie ausgeführt, da das return immer davor ausgeführt wird. Dass du immer einen Rickgabewert angeben musst ist auch richtig. Das ist genau der Unterschied, ob du bei der Funktion void oder z.B. int stehen hast. Nur bei void brauchst du keinen Rückgabewert angeben sprich das return weglassen. Falls man die Funktion aber früher verlassen möchte kann man immer noch ein return ohne Wert angeben.

    • @gunarknockel9903
      @gunarknockel9903 6 років тому

      klingt logisch - hat auch funktioniert
      dankeschön!

  • @IZxMD
    @IZxMD 4 роки тому

    wenn man bei der menu auswahl mehr als eine z.b. "2" eingiebt also "222" so wird number1 = 22 allerdings sollte man etwas wie "2B" eingeben so kommt es zu einem stack overflow xD leider bin ich noch ein blutiger anfänger und weiß nicht wie man das ausnutzen könnte. #GreenHat

  • @NukeFinity
    @NukeFinity 3 роки тому

    Ich habe alle int Variablen durch float ersetzt leider kommt trotzdem nur ein ganzzahliges Ergebnis raus. Hat wer ne Idee wieso? (Außer beim Dividieren da klappt es mit den Nachkommerstellen)

    • @Pilzschaf
      @Pilzschaf  3 роки тому

      Die Stellen werden standardmäßig nur angezeigt, wenn sie nötig sind

  • @OoLiKeVioLenCeoO
    @OoLiKeVioLenCeoO 3 роки тому

    Zwei Dinge die eigentlich mehr was mit dem Tippen der Codes selber zu tun hat:
    1.Was drückst du damit direkt alles übernommen wird was vorgeschlagen wird? Beispiel wenn man GetNumber*** eingibt, dann schlägt ja das Programm den Rest des Wortes vor, aber wenn ich dann enter, einf oder sonstiges drücke, wird es nicht übernommen und halt das enter gesetzt.
    2. Ich bin seit neusten in einem Modus, dass wenn ich was zwischen den Wörter selbst korrigieren will (Beispiel ich schreibe int man() und will das i von maIn einsetzen) die Buchstaben selbst durch die Eingabe ersetzt werden, anstatt dass die Buchstaben dazwischen gesetzt werden, wie es ja standardmäßig ist. Hab ich irgendeinen Modus aus Versehen aktiviert? ^^'
    Ps: danke für die Videos :)

    • @Pilzschaf
      @Pilzschaf  3 роки тому

      1. Ich drücke Pfeiltaste nach unten. Dann kann man einen der vorgeschlagenen Einträge auswählen. Je nachdem kann man z.B. auch die Pfeiltaste nch rechts drücken.
      2. Du hast vermutlich aus versehen die Einfügen Taste gedrückt. Dürfte bei dir vermutlich EINFG heißen. Einfach nochmal drücken, dann sollte es wieder normal funktionieren.
      LG Pilzschaf

    • @OoLiKeVioLenCeoO
      @OoLiKeVioLenCeoO 3 роки тому

      @@Pilzschaf
      Danke dir, dass du dir die Zeit nimmst :)

  • @joshua_eff1757
    @joshua_eff1757 5 років тому

    ich habe bevor du den Taschrechner eigentlich im Video baust den schonmal vorgebaut und bin zu einer anderen Version gekommen

    • @Pilzschaf
      @Pilzschaf  5 років тому +3

      So war das auch gedacht. Es gibt immer viele verschiedene Wege zum Ziel. Und meiner ist auch nicht unbedingt besser als andere Wege. Am Ende zählt das Resultat ;)

  • @kinoooshdekino5573
    @kinoooshdekino5573 4 роки тому

    Wenn ich //system schreib ist es ein Kommentar was los ich machen Help guys

    • @Auroria__
      @Auroria__ 3 роки тому

      Ja, ist ja aich richtig, wenn du ihn nutzen willst, musst du es ohne \\ machen