Sariel Geschrieben 20. November 2003 Geschrieben 20. November 2003 Moin, ihr werdet es vermutlich als einfach sehen, aber ich habe eine kleine Frage zu diesem C Programm: #include <stdio.h> void main(void) { int a,b; a=4; b=5; printf ("a=%i, b=%i\n", a,; --a; ++b; printf ("a=%i, b=%i\n", a,; printf ("a=%i, b=%i\n", ++a); printf ("a=%i, b=%i\n", a-- +b,; getchar (); } [/code] Wenn ich diese Eingabe Compiliert habe und das Programm dann starte, bekomme ich folgende Ausgabe: a=4, b=5 a=3, b=6 a=4, b=6 a=10, b=6 Die ersten drei Zeilen der Ausgabe kann ich nachvollziehen. Nur bei der letzten komme ich etwas ins stolpern. Kann mir jemand erklären wie der wert 10 bei a zustande kommt? Oder besser wie wird mit a-- gerechnet? Ich habe gelernt das dann a-1 gerechnet wird genauso wie --a gleich a-1 ist. Wenn ich es so rechne komme ich dann aber nur auf neun statt zehn? Es Grüsst, Cr@sh [der sich so langsam mit C Programmierung anfreundet] Zitieren
Crush Geschrieben 20. November 2003 Geschrieben 20. November 2003 printf ("a=%i, b=%i\n", ++a); Die Ausgabe von b ist eigentlich nicht definiert, weil der Parameter fehlt... welchen Compiler benutzt Du, daß da 6 ausgegeben wird? printf ("a=%i, b=%i\n", a-- +b,; Der Parameter a wird erst der Funktion übergeben, bevor er runtergezählt wird. Und da es vorher 4 war, wird 4+6=10 ausgegeben und nach der Ausgabe ist a=3. Bei --a wird a auf jeden Fall vor dem Aufruf der Funktion a runtergezählt und dann erst als Parameter weitergegeben und das Ergebnis ist 9. Zitieren
Sariel Geschrieben 20. November 2003 Autor Geschrieben 20. November 2003 Original geschrieben von Crush Die Ausgabe von b ist eigentlich nicht definiert, weil der Parameter fehlt... welchen Compiler benutzt Du, daß da 6 ausgegeben wird? Hi Crush, Ich benutze den Bloodshed Dev-C++. Noch eine kleine Zwischenfrage: Wofür steht die Anweisung "case" ? Zitieren
FinalFantasy Geschrieben 20. November 2003 Geschrieben 20. November 2003 Wo steht da was von Case?? Zitieren
Sariel Geschrieben 20. November 2003 Autor Geschrieben 20. November 2003 Original geschrieben von FinalFantasy Wo steht da was von Case?? Dort nirgens, - ich wollte es wissen, da ich ein Programm habe, wo es vorkommt. Und wollte deswegen keinen Extra Thread aufmachen. Deswegen habe ich gesagt Zwischenfrage. Zitieren
FinalFantasy Geschrieben 20. November 2003 Geschrieben 20. November 2003 Achso, naja ich nehme dann mal an, dass das eine switch(irgendwas) { case 1: case 2:...} ist. Dass ist eine Mehrfachverzweigung. Wenn die variable irgendwas den wert 1 hat, wird der code nach case 1 ausgeführt, usw. Zitieren
Sariel Geschrieben 20. November 2003 Autor Geschrieben 20. November 2003 Das Programm sieht so aus: #include <stdio.h> void main(void) { char wahl; printf ("Weiter ('J'/'N')"); fflush (stdin); scanf ("%c",&wahl); fflush (stdin); switch (wahl) { case 'J' case 'j' printf ("Weiter!\n"); break case 'N' case 'n' printf ("Ende!\n"); break default; printf ("Nur 'J' oder 'N' erlaubte Eingabe!\n"); } getchar (); } Jetzt sagt mir mein Compiler, das Ein Fehler enthalten ist. parse error before 'case' :confused: Zitieren
FinalFantasy Geschrieben 20. November 2003 Geschrieben 20. November 2003 nach dem case 'X': fehlt jedes mal der Doppelpunkt, das würde ich sagen ist der Fehler. Switch-Case sollte eigentlich in jedem C-Buch gut erklärt sein. Zitieren
Sariel Geschrieben 20. November 2003 Autor Geschrieben 20. November 2003 Original geschrieben von FinalFantasy nach dem case 'X': fehlt jedes mal der Doppelpunkt, das würde ich sagen ist der Fehler. Anscheinend nicht. Jetzt sieht der Abschnitt so aus: { case 'J': case 'j': printf ("Weiter!\n"); break [COLOR=red]case 'N':[/COLOR] case 'n': printf ("Ende!\n"); break default; printf ("Nur 'J' oder 'N' erlaubte Eingabe!\n"); } In der rot markierten Zeile soll der Fehler sein. Kann das eventuell am Compiler liegen? Zitieren
Klotzkopp Geschrieben 20. November 2003 Geschrieben 20. November 2003 Hinter jedes break gehört ein Semikolon. Und hinter default ein Doppelpunkt. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.