Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

11

24.07.2014, 17:55

Mr-Black: Wir waren alle mal Kack-Noobs. Bis auf David, der wurde mit C++ Kenntnissen geboren. ;)

Deine Frage nach gutem Stil ist ein guter Schritt um besser zu werden!

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

12

24.07.2014, 18:03

Die Präfixe solltest du allgemein weg lassen. Am Beispiel von "n_" wurde das ja schon genannt. Präfixe allgemein sind quatsch. Benenne deine Variablen sinnvoll, dann sollte im Prinzip klar sein um was es sich handelt. Ansonsten hilft dir deine IDE weiter um schnell einen Typ anzuzeigen. "endl" würde ich "\n" auf jeden Fall vorziehen. std::endl und '\n' sind nicht dasselbe. Durch std::endl machst du einen Zeilenumbruch und das Betriebssystemunabhängig. '\n' ist das eben nicht. Und std::endl führt nach dem Zeilenumbruch direkt einen flush aus. Du könntest wenn du möchtest deine Ausgaben auch zusammenfügen.

C-/C++-Quelltext

1
2
3
int input;
std::cout << "Ausgabe1" << std::endl << "Ausgabe2" << std::endl << "Ausgabe3" << std::endl;
std::cin >> input;


Diese Verkettung ist halt nur nicht immer sinnvoll. Du sparst zwar Zeilen ein, diese können jedoch auch der Übersicht helfen. Da musst du also ein wenig abwägen wann du verkettest und wann nicht. So wie es aktuell bei dir ist, was in einer Zeile steht wird auch als Zeile ausgegeben, ist an sich schon ganz sinnvoll. Ansonsten wurden schon einige wichtige Dinge gesagt. Einige Dinge lernst du halt mit der Zeit. Und sobald die Grundlagen sitzen kannst du dich natürlich auch auf Bücher zu dem Thema stürzen. Effective C++ wäre da ein solches Buch was teilweise weiter helfen kann.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

13

24.07.2014, 18:08

Guter Stil braucht, wie Programmierung generell, einfach auch Zeit.
Wenn du noch nicht mal beim "switch" angelangt bist, ist es wahrscheinlich für dich noch zu früh die Auswirkungen der meisten Dinge wirklich abzusehen und auf viele Stilfragen bist du wahrscheinlich noch gar nicht gestoßen. Es ist natürlich nie zu früh damit sich um guten Stil Gedanken zu machen. Funktionieren tut es aber nicht vom ersten Tag an.

Nochmal wegen des Kommaoperators...
Der Kommaoperator ist ein Operator in C++ der erst den Ausdruck links von ihm ausführt und dann den rechts von ihm und dann den Wert des rechten zurückgibt.
Das ist zum Beispiel nützlich im Schleifenköpfen um mehrere Operationen auszuführen. Ich vermute aber mal das du "soweit noch nicht bist", deshalb spare ich mir mal ein konkretes Beispiel. Da "," die niedrigste Operatorpriortät hat, bindet = stärker als das Komma.
Wenn man also um "n_Spieler = 0, 1, 2;" Klammern setzt, ist der Ausdruck:
"((n_Spieler = 0), 1), 2;"
Also "n_Spieler" 0 zuweisen. Dann 1 auswerten. Verwerfen. Dann 2 auswerten, aber damit auch nichts machen.
Im Prinzip macht es also das selbe wie "n_Spieler = 0".
In der Regel sollte man den Kommaoperator eher selten verwenden, da das Verhalten wahrscheinlich gerade für dich als Neuling etwas verwirrend ist. Seine gelegentliche Nützlichkeit lässt sich natürlich nicht abstreiten.

EDIT:

Zitat

"endl" würde ich "\n" auf jeden Fall vorziehen.

"std::endl" bläht nur den Quellcode und sogar auch die fertige Executable auf.

Zitat

Durch std::endl machst du einen Zeilenumbruch und das Betriebssystemunabhängig. '\n' ist das eben nicht.

Nein, das stimmt nicht. '\n' ist ebenfalls Betriebssystemunabhänig. Die Streams müssen sich laut Standard daraum kümmern, das ggf. zu übersetzen, falls es notwendig ist. Das ist auch einer der Gründe warum bei Filestreams angeben kann, ob es ein Text oder ein Binärstream ist. Wegen dieser Übersetzung. '\n' ist jedenfalls ebenfalls Betriebssystemunabhänig.

Zitat

Und std::endl führt nach dem Zeilenumbruch direkt einen flush aus.

Das ist der einzige Unterschied zwischen '\n' und "std::endl" Tatsächlich bringt es aber gar nichts 100 mal zu flushen. Das bläht nur den Quellcode, den Maschinencode und die Laufzeit auf.

Zum Verketten lässt man am besten gleich die Strings zusammen.

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Spiele Programmierer« (24.07.2014, 18:22)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

14

24.07.2014, 18:14

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (n_Level == 1)
{
    cout << "Level 1" << endl;
}
else if (n_Level == 2)
{
    cout << "Level 2" << endl;
}
else if (n_Level == 3)
{
    cout << "Level 3" << endl;
}
else
{
    cout << "Dises level existirt nicht, Programm wird Beendet.";
}

switch&case ist für diesen Fall eigentlich garnicht geeignet.
Wie wäre es damit?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
if (n_Level > 3 || n_Level < 1)
{
    cout << "Dises level existirt nicht, Programm wird Beendet.";
}
else
{
    cout << "Level " << n_Level << endl;
}
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Mr-Black

Frischling

  • »Mr-Black« ist der Autor dieses Themas

Beiträge: 5

Wohnort: Zu Hause

Beruf: Koch

  • Private Nachricht senden

15

24.07.2014, 18:40

Zitat

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
C-/C++-Quelltext

if (n_Level > 3 || n_Level < 1)
{
    cout << "Dises level existirt nicht, Programm wird Beendet.";
}
else
{
    cout << "Level " << n_Level << endl;
}


Du meinst Praktisch um jede eingabe die nicht 1,2,3 ist die fehler meldung ausgibt ?
wenn ich das so richtig verstanden haben. guter tipp danke.
Für solche abfolgen fehlt mir halt einfach noch die übung und ehrfarung.
Si vis pacem para bellum = Wer den Frieden sucht, muss sich für den Krieg rüssten

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

16

24.07.2014, 18:46

Das mit dem Fehler war doch auch vorher schon so.
Ich denke, er meinte eher, dass es nicht so redundant ist.
Du hast 3 Zeilen Code die das Gleiche machen. Deshalb bietet sich an, das zu verallgemeinern. Dadurch ist es erweiterbarer, kompakter und verständlicher.

Man könnte auch nochmal die Anzahl Zeilen halbieren in dem man überflüssige Klammern weglässt. (Habe ich, glaube ich, sogar schon gesagt)

C-/C++-Quelltext

1
2
3
4
]if (n_Level > 3 || n_Level < 1)
    cout << "Dises level existirt nicht, Programm wird Beendet.";
else
    cout << "Level " << n_Level << '\n';

Eine geschweifte Klammer gruppiert mehrere Anweisungen. Wird nur eine Anweisung benötigt, kann man sie genauso gut weglassen.
Ich persönlich finde das dann drastisch übersichtlicher.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (24.07.2014, 22:36)


Mr-Black

Frischling

  • »Mr-Black« ist der Autor dieses Themas

Beiträge: 5

Wohnort: Zu Hause

Beruf: Koch

  • Private Nachricht senden

17

24.07.2014, 19:09

ok das wirklich viel übersichtlicher. imgegensatz zum meim ^^
danke erst mal dafür.

Und jetzt hätte ich mal noch ne frage, da ihr mich hier grade so gut und nett supportet.
Kann ich mir eventuel das erstellen eines weiteren themas sparen.
Und zwar ich lerne ja in richtung spiler programmirung, wie mein beispiel warscheinlich schon hat durch blicken lassen.
Ich habe mir das Buch C++ FÜR SPIELE PROGRAMMIERER Auflage 4 gekauft. Und arbeite es momentan halt ab.
Auf disen weg wollte ich mal fragen welche bücher ihr mir noch empfelen könntet. Die in dise richtung gehn.
3D-Spieleprogrammierung hab ich mir schon bei Amazon bestellt.
Habt ihr noch geheim tipps oder ansich gute bücher die in dise richtung gehn ?
Greez Black
Si vis pacem para bellum = Wer den Frieden sucht, muss sich für den Krieg rüssten

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

18

24.07.2014, 19:28

Mach lieber von deinem 14 Tage Wiederrufsrecht gebraucht und schick das Buch zurück. Ich habe das Buch selbst zu früh gekauft und es garnicht gebraucht...
Schau dir nach "C++ für Spieleprogrammierer" erstmal die SFML an und entwickel ein paar kleine Spiele.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Mr-Black

Frischling

  • »Mr-Black« ist der Autor dieses Themas

Beiträge: 5

Wohnort: Zu Hause

Beruf: Koch

  • Private Nachricht senden

19

24.07.2014, 19:32

ach das passt schon ^^ hatte noch nen geschenk gutschein ^^
Si vis pacem para bellum = Wer den Frieden sucht, muss sich für den Krieg rüssten

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

20

24.07.2014, 19:43

Du könntest dir davon ein anderes Buch kaufen.
Z.B. "the c++ programming language"
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige