erster c++ code tipps und kretik

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • erster c++ code tipps und kretik

    Hallo zusammen,
    ich habe mich seit ungefair einer woche mit c++ beschäftigt, und wollte mal meinen code vorstellen.

    Ich
    hoffe ihr könnt mir Tipps und gute Kritik mit auf dem weg geben wie ich
    es besser machen kann was falsch oder auch nur sinnlos ist.

    Habe
    diesen code gestern abend geschriben ist derzeit mein erstes mit c++,
    bitte um verständnis bei schlechter ausführung da ich hier noch am
    anfang stehe. :thumbsup:


    Quellcode

    1. #include <iostream>
    2. void plus();
    3. void minus();
    4. void mal();
    5. void geteilt();
    6. using namespace std;
    7. int main()
    8. {
    9. char Taschenrechner;
    10. cout << "Taschenrechner Waehle eine Zahl und druecke Enter\n"
    11. << "\t1.Plus +\n"
    12. << "\t2.Minus -\n"
    13. << "\t3.Mal *\n"
    14. << "\t4.Geteilt :\n"
    15. << "\t5.Bildschirm Leeren\n"
    16. << "\t6.Beenden\n";
    17. cin >> Taschenrechner;
    18. switch(Taschenrechner)
    19. {
    20. case '1':
    21. cout << "Plus +\n";
    22. plus();
    23. break;
    24. case '2':
    25. cout << "Minus -\n";
    26. minus();
    27. break;
    28. case '3':
    29. cout << "Mal *\n";
    30. mal();
    31. break;
    32. case '4':
    33. cout << "Geteilt :\n";
    34. geteilt();
    35. break;
    36. case '5':
    37. system("cls");
    38. main();
    39. break;
    40. case '6':
    41. return 0;
    42. default:
    43. cout << "Du hast keine Option Gewaehlt.";
    44. }
    45. cin.sync();
    46. cin.get();
    47. return 0;
    48. }
    49. void plus()
    50. {
    51. int zahl1, zahl2;
    52. cout << "Erste Zahl\n";
    53. cin >> zahl1;
    54. cout << "Zweite Zahl\n";
    55. cin >> zahl2;
    56. cout << "Ergebnis\n" << zahl1 + zahl2 << endl;
    57. main();
    58. }
    59. void minus()
    60. {
    61. int zahl1, zahl2;
    62. cout << "Erste Zahl\n";
    63. cin >> zahl1;
    64. cout << "Zweite Zahl\n";
    65. cin >> zahl2;
    66. cout << "Ergebnis\n" << zahl1 - zahl2 << endl;
    67. main();
    68. }
    69. void mal()
    70. {
    71. int zahl1, zahl2;
    72. cout << "Erste Zahl\n";
    73. cin >> zahl1;
    74. cout << "Zweite Zahl\n";
    75. cin >> zahl2;
    76. cout << "Ergebnis\n" << zahl1 * zahl2 << endl;
    77. main();
    78. }
    79. void geteilt()
    80. {
    81. int zahl1, zahl2;
    82. cout << "Erste Zahl\n";
    83. cin >> zahl1;
    84. cout << "Zweite Zahl\n";
    85. cin >> zahl2;
    86. cout << "Ergebnis\n" << zahl1 / zahl2 << endl;
    87. main();
    88. }
    Alles anzeigen
  • Guten Abend amogma :)

    Schön, dass du mit C++ anfängst. Schöne Sprache ;)


    Das erste was mir auffällt ist, dass du innerhalb deiner Rechenfunktionen (plus(), minus(), ...) die Main-Funktion aufrufst. Laut C++-Standard ist das ganze verboten.
    The function main shall not be used (3.2) within a program.
    Warum genau, ist mir selbst mangels fundierter C++-Kenntnisse nicht ganz klar. Standards haben aber (meistens) ihren Sinn und sollten befolgt werden. :D


    Bau dein Programm lieber so um, dass du den ganzen Code in der Main-Methode solange ausführst, wie deine Variable "Taschenrechner" nicht 6 ist - sprich du nicht deinen 6. Menüpunkt ausgewählt hast. Dafür verwendet man die Kontrollstruktur "while" bzw. "do while". Hier ein kleines Beispiel, bei dem der Code innerhalb des While-Blocks solange ausgeführt wird, wie "i" ungleich 10 ist. Sobald i den Wer 10 annimmt, wird mit den nachfolgendem Code fortgefahren.

    Quellcode

    1. while(i != 10)
    2. {
    3. i++; //erhöht die Variable um 1
    4. cout << i << endl;
    5. }
    6. // .... nachfolgender Code



    In deinem Taschenrechner kannst du das ganze so verpacken:

    Quellcode

    1. char Taschenrechner;
    2. while(Taschenrechner != '6')
    3. {
    4. // ... Menüauswahl anzeigen lassen
    5. cin >> Taschenrechner;
    6. // switch-Statement
    7. }
    8. // Beenden des Programms
    9. return 0;
    Alles anzeigen




    Das war das grobe, was mir aufgefallen ist. Ich hoffe meine Erklärung war verständlich. ;)

    Quellen zum Nachlesen:
    de.wikibooks.org/wiki/C%2B%2B-…ung_in_C%2B%2B/_Schleifen
  • Hab jetzt nicht alles ausprobiert damit meine Compiler deinen Quelltext schlucken.

    Wie schon geschrieben: Das aufrufen von main() im Quelltext entspricht etwa einem goto. Und das sollte man möglichst meiden.
    Du kannst das eleganter mit do-while lösen.

    Wenn du deinen Compiler auf neuere Standard, wie z.B. C++11 einstellst, werden zusätzlich deine Funktionen plus() und minus() als Fehler gemeldet. Da dürfte eine Nameskollusion vorliegen.

    Da meine Compiler sich weigern kann ich die Division nicht testen. Was passiert bei Division durch 0? Was gibt das Programm bei 2/3 aus?

    Am besten du stellst deinen Compiler zum Lernen so ein das er möglichst alle Warnungen oder Fehler kommentiert. Nur, wenn du dir absolut sicher bist das dein Compiler unrecht hat, kannst du diesen speziellen Fehler oder die Warnung ignorieren.

    MfG bcc-fan