Der Martin: kennt sich jemand mit C aus?

Beitrag lesen

Hallo Christoph,

sehr schön ausgeführt, für meinen Geschmack schon etwas *zu* schulmeisterlich, aber das ist Geschmackssache.

#define ANZ 20

Hier fehlt der kurze Kommentar, was diese Nummer machen soll.

"Fehlt" ist ziemlich stark formuliert. Da könnte man meinen, der Kommentar sei Pflicht. Sinnvoll und sehr empfehlenswert ist er aber allemal.

{

Geschweifte Klammern auf eine neue Zeile zu setzen kann zu Unfällen führen. War erst neulich hier im Forum.

Ich weiß jetzt nicht, auf welchen Fall du ansprichst. Aber ich persönlich setze die öffnende und die schließende geschweifte Klammer IMMER in eine neue Zeile. Ich finde das übersichtlicher. Wenn ich fremden Programmcode durchgehen muss, gibt es für mich kaum was Schlimmeres, als eine öffnende Klammer, die noch so unauffällig am Zeilenende steht. Da übersehe ich sie nämlich leicht.

char string[ANZ+1], c=(char)(0); // oder c = '\0'

Die Typen char und int sind zuweisungskompatibel, deswegen halte ich die Schreibweise '\0' eigentlich für unnötig kompliziert, genauso wie einen type cast zwischen int und char.

memset(string,'\0',ANZ+1);

Wenn schon, dann:
 char string[ANZ+1] = "";
Selbst das ist Standard. Arrayelemente (in diesem Fall chars), die bei der Initialisierung nicht explizit einen Wert erhalten, werden mit 0 belegt (oder '\0' oder NULL, je nachdem was dir am liebsten ist).

BTW: ein cast wäre hier eigentlich angesagt:
}while(c!=(char)(13));

Überflüssig. Macht die Sache IMHO nur schwerer zu lesen.

Und 13 ist \r. Wenn Du das Zeilenende erwartest, dann benutze auch das entsprechende Zeichen. Leider ist das nicht portabel, da es eine Menge Zeichen für dsa Zeilenende gibt. Selbst wenn man es auf die gängigsten 3 reduziert wird unangenehm: Apple hat '\r', MS hat '\r\n', Unix hat '\n'.

ACK (nur das mit dem Apple wusste ich noch nicht).
Aber die getchar()-Funktion liefert unabhängig davon den "reinen" ASCII-Code, der der Taste zugeordnet ist. Bei der Enter-Taste ist das generell '\r' (oder 13 oder '\x0D'). Erst wenn man das jetzt auch noch ausgeben will, muss man aufpassen, weil putchar() das Zeichen uninterpretiert ausgibt. Hier kann man also beim gleichen Zeichen plattformabhängig verschiedene Ergebnisse erhalten. Bei printf() ist es wieder anders: Hier wird '\n' (oder 10 oder '\x0A') automatisch in das Zeichen oder die Zeichenfolge konvertiert, die auf dem jeweiligen System eine neue Zeile erzeugt. Unter MS-Betriebssystemen also in "\r\n".

Ich hoffe, du fühlst dich jetzt nicht angegriffen oder so; ich wollte nur deutlich machen, dass manches, was du hier empfohlen hast, eigentlich übervorsichtig ist - oder eben Geschmackssache. ;)

Schönen Abend noch,

Martin