Bitte Quelltext prüfen - highcore.de Anhang A Aufgabe 2
-
Bei der unteren Auswahl schau noch mal in dein Tutorial wegen switch - case -break

Schleifen: do - while oder nur while solltest du auch noch mal üben, dann sollt das goto entbehrlich sein.
MfG f.-th.
-
Wenn ich es wie folgt mache, dann meckert er wegen des Zeigers (error C2450: switch-Ausdruck des Typs 'int *' nicht zulässig).
Ich hatte eigentlich kein switch benutzt, weil switch nur mit char und int arbeitet.void choose(int* money) { cout<<"\nBitte treffen Sie eine Auswahl: \n1 = Kontostand \n2 = Auszahlung \n3 = Neuanmeldung\n\nAuswahl:"; int Auswahl; cin>>Auswahl; switch(money) { case 1: show(money); break; case 2: give(money); break; case 3: cout<<"\n"; break; default: cout<<"\nAuswahl nicht m\224glich!!!\n\n"; break; }Zeile 29 habe ich jetzt einfach durch
while(1) {ersetzt und in Zeile 52 die Schleife geschlossen.
-
Wieso switchst du money und nicht Auswahl?
switch mag zwar performant sein, aber die Übersichtlichkeit erhöht es selten oder nie, wie du vielleicht merkst.
So ist es doch deutlich übersichtlicher:if (Auswahl==1)show(money); else if (Auswahl==2)give(money); else if (Auswahl==3)cout<<"\n"; else cout<<"\nAuswahl nicht m\224glich!!!\n\n";
-
Dann musste du dir das Kapitel mit int und char auch noch mal ansehen.

Hier ein Link:
http://www.c-plusplus.net/forum/viewtopic-var-p-is-916613.htmlMfG f.-th.
-
Sollte genauer lesen

Schau wegen switch in dein Tutorial Kap. 4.1
-
...einfach nur ein Fehler...
@ f.-th.
Danke für die genauen Tipps (du machst dir sogar die Mühe und stimmst sie auf mein Tutorial ab). Switch habe ich eigentlich schon verstanden ^^.
Es ging bei deinem Hinweis doch hoffentlich nur um den von Athar beschriebenen Fehler oder?
-
Der Grund warum dein switch nicht klappt, ist weil du beim switch oben keinen int sondern einen int* also einen Pointer auf int reinschmeißt. Du könntest es ganz einfach lösen, indem du monex dereferenzierst, also mit
switch(*money) { ... }Zumal ich nicht wirklich verstehe warum du also Funktionsargument Pointer nimmst. Willst du dir dadurch das Kopieren der Argumente sparen? Dann hätte es eine const-Referenz auch getan, also
void choose(const int& money) { ... }Für solche Beispiele sind Referenzen denke ich besser als Pointer.
Das ist nur das was mir noch aufgefallen ist.
-
Bei dem switch hätte ich einfach nur Auswahl, also den richtigen Wert, einfügen sollen, dann hätte alles geklappt.
Da die referenzierte Variable geändert werden soll funktioniert doch const nicht oder?
Eine einfache Referenz könnte ich aber anscheinend verwenden.Zu deiner Frage warum ich das tue: Ich finde Zeiger sehr sympatisch gegenüber Referenzen.
Wenn ich einer Funktion eine Referenz gebe und diese dann weitergegeben wird und das dann noch 20x passiert, dann stelle ich mir da eine endlose Schlange an Verknüpfungen auf Verknüpfungen vor (auch wenn das eventuell nicht so ist).
Wenn ich hingegen eine Adresse weitergebe, dann bleibt das immer die selbe.Und ja, es geht in der Programmierung vermutlich nicht um persönliche Präferenzen, sondern eher um sinnvoll und nützlich.

Dank und Gruß, SchlippSchlapp
-
Du weißt schon, dass eine Referenz intern auch nur ein Zeiger ist? Naja, rhetorische Frage

Edit: da du jetzt keine Performanzsorgen mehr haben musst: nimm Zeiger für optionale Argumente (d.h. dürfen auch NULL sein) und Referenzen für Pflichtargumente.
-
Du wirst meine Sympathie auch nicht mit irgendwelchen, an den Haaren herbeigezogenen, Pseudo-Fakten brechen

Edit: Danke für den Verwendungshinweis
-
Naja, wenn du einen C++ - Kompiler schreiben müsstest, wie würdest du Referenzen implementieren? Da Zeiger ein von CPUs nativ unterstütztes Konzept sind und Referenzen sich wie automatisch selbst-dereferenzierende Zeiger verhalten, ist die Implementierung durch Zeiger naheliegend. Das fanden die Entwickler der existierenden C++ - Compiler auch.
-
Ich wollte jetzt auch keine Grundsatzdiskutsion zu Referenzen vs. Pointern anfangen. War nicht meine Absicht, sorry :D.
Hat beides wie gesagt Vor- und Nachteile.
Mit Referenzen kann man meiner Meinung nach halt weniger falsch machen ;).