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]
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.
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" ?
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.
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.
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:
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.
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?
Klotzkopp Geschrieben 20. November 2003 Geschrieben 20. November 2003 Hinter jedes break gehört ein Semikolon. Und hinter default ein Doppelpunkt.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden