005
12.04.2014, 01:44 Uhr
Hans
Library Walker (Operator)
|
Hi,
als erstes mal: Was hier in dem Beispielcode behandelt wird, sind NUR Verzweigungen, aber keine Schleifen. Schleifen sind die Konstrukte zur Wiederholung von Anweisungen, also:
C++: |
for (...) // tue irgendwas
while (...) // tue irgendwas
do // tue irgendwas while(...);
|
Dann noch mal zu dem Programbeispiel: ich finde es gerade bei solchen komplizierteren Verzweigungsbäumen immer ganz praktisch, wenn ich nach der schliessenden Klammer auch sehe, welchen Block sie genau abschliesst. Deshalb hab ich das in den Kommentaren dahinter geschrieben. Zur Terminologie: Der innere Block (bzw. die innere Verzweigung) ist in diesem Beispiel jene, die mit switch(h) eingeleitet wird. Die andere, die mit switch(c) anfängt, ist der äussere Block. Wenn ich Deine Logik richtig verstehe, dann gehört Deine Fehlermeldung als default Zweig in den inneren Block, d.h. vor der abschliessenden Klammer von switch(h), also so:
C++: |
//////////////////////////////////////////////////////////////////////////////////// switch(c) // äusserer Anweisungsblock { case('i'): { switch(h) // innerer Anweisungsblock { case('o'): cout << "o" << endl; // .... break; // case ('o') case('p'): cout << "p" << endl; // .... break; // case('p')
/* Hier gehört die Fehlermeldung hin, wenn keines der cases zutrifft, die in diesem inneren Block überprüft werden. */ default: cout << "Fehler!" << endl; } // switch (h) - hier ist der innere Anweisungsblock zu Ende
break; // verzweigt zum Ende des switch-Blocks, weil die zutreffende // Bedingung vollständig bearbeitet wurde. } // case ('i') case ('j'): { cout << "j" << endl; break; } // case ('j') default: { cout << ".........." << endl; } } // switch(c) - hier ist der äussere Anweisungsblock zu Ende; Nachfolgende // Anweisungen haben mit der Auswahllogik nichts mehr zu tun.
|
Die Stelle, wo Du sie im Posting 002 hingeschrieben hast, ist jene, an der alle Verzweigungen abgearbeitet sind, also die nachfolgende Anweisung. Deshalb wird sie da auch immer ausgeführt.
Was die Bücher angeht: Das von Kallista kenn ich nicht, also kann ich dazu nichts sagen. Ich empfehle hier meisstens den Breymann. Das Buch ist sehr umfangreich, weil es nicht nur die Sprache selbst vermittelt, sondern auch diverse weiterführende Theman behandelt, mit denen man es früher oder später zu tun bekommt. D.h. es verschafft einem einen Überblick darüber, auf dem man aufbauen kann, um sie bei Bedarf mit anderen Büchern zu vertiefen. Die Bücher von Jürgen Wolf sollen auch ganz brauchbar sein, wie hier mal irgendwo zu lesen war. Ich kann sie aber nicht beurteilen. Ein anderer Kollege aus diesem Forum hat mal die Bücher von Scott Meyers empfohlen, wenn ich mich nicht irre. Und schliesslich wäre da noch der Herr Stroustrup zu nennen, der Erfinder von C++. Aber am besten ist es immer, erst mal in eine Bibliothek zu gehen, und sich die Bücher dort anzusehen, und die interessantesten auszuleihen um zu Hause in Ruhe feststellen zu können, womit man am besten klar kommt. - Wenn man dann das optimale Buch gefunden hat, kann man es immer noch kaufen. Wenn Du mit der Einführung durch bist, oder auch parallel dazu, wirst Du irgendwann ein Buch aus der Kategorie "Algorithmen und Datenstrukturen" zumindst teilweise durcharbeiten müssen, etwa "Algorithmen in C++" von Robert Sedgewick oder "Softwaretechnik in C/C++" von Rolf Isernhagen, was inzwischen nur noch in Bibliotheken zu haben ist. Wenn Du dann immer noch dabei bist, nimmst du Dir die englische "Game Programming Gems"-Reihe vor... -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. Dieser Post wurde am 12.04.2014 um 01:50 Uhr von Hans editiert. |