Diskussion:C-Programmierung: Einfache Ein- und Ausgabe

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Lob[Bearbeiten]

Liebe Verfasser

Das ist die wahrscheinlich beste Anleitung zum C lernen die es im Netz gibt. Man kann diese auch mit Linux brauchen, die anderen im Netz nicht. Grosses Lob an alle die hier verfasst haben!!!!!!

Warum scanf?[Bearbeiten]

Weil meine Azubis mit dieser Funktion sehr häufig Fehler machen, habe ich mich gefragt, warum eigentlich alle C-Lehrbücher als erste Eingabe die scanf-Funktion nennen? Es wird zwar meist darauf hingewiesen, dass man in produktiven Programmen bessere Varianten verwenden soll, aber die Verwendung von scanf prägt sich bei den meisten ein und wird auch später noch praktiziert. Ich möchte mal eine Variante zur Diskussion stellen: fgets (+ atoi, bzw. atof für int und double).

scanf[Bearbeiten]

Vorteile:

  • Man braucht nur ein include
  • Umwandlung Zeichenkette in Integer muss nicht programmiert werden

Nachteile:

  • Addressoperator & muss gelernt werden obwohl Zeiger noch nicht bekannt sind
  • Formatstring muss gelernt werden inkl. Unterschiede zu printf
  • Unterschied zwischen String-Variablen (ohne &) und Integer/Gleitkomme-Variablen (mit &) ohne Wissen über Zeiger nicht verständlich
  • Gewöhnung der Lernenden an unsichere Eingabefunktionen
  • Hinterlässt Zeichen im Eingabepuffer
  • Fehleranfällig (z.B. Eingabe von Buchstaben statt Ziffern)

fgets (+ atoi, atof)[Bearbeiten]

Vorteile:

  • Sicher gegen Pufferüberläufe
  • Hinterlässt bei Eingabe von Buchstaben statt Ziffern keine Zeichen im Eingabepuffer (Fehleingabe betrifft nur eine Eingabeaufforderung und nicht alle folgenden)
  • Gewöhnung der Lernenden an sichere Eingabefunktionen
  • Keine "unerklärlichen" Unterschiede zwischen Datentypen: Es wird immer ein String eingelesen und bei Bedarf in int oder double konvertiert

Nachteile:

  • Man muss zusätzlich stdlib.h includen
  • char-Array wird eingeführt bevor Arrays behandelt werden
  • Umwandlung Text->Zahl muss explizit erfolgen

Chloch 16:43, 7. Dez. 2009 (CET)

Formatelemente[Bearbeiten]

Ich sehe nicht, wieso weitere Formatelement in der Referenz zu finden bzw. erklärt werden sollen. Also da steht mal gar nichts dazu. Ich schreibe also sowas wie %p erstmal direkt hier hin. Grüße --WissensDürster 10:13, 3. Feb. 2009 (CET)

Flags?[Bearbeiten]

Was hat es bitte mit dem Flag Minus "-" auf sich? Die Ausrichtung nach links, gibt es doch immer automatisch!? Wäre nicht eine Ausrichtung "rechts" oder "zentriert" interessanter gewesen. Ich verstehe die Flags nicht ganz. --WissensDürster 15:15, 12. Feb. 2009 (CET)

Tada. Selbst drauf gekommen. Wenn man die C-Programmierung:_Einfache_Ein-_und_Ausgabe#Feldbreite nämlich durch Zeichen auffüllt, kann man die eigentlichen Parameter links anordnen. --WissensDürster 16:36, 12. Feb. 2009 (CET)

entfernt[Bearbeiten]

Ich habe folgendes entfert, weil zu 3 Zeilen die Erklärung doppelt vorhanden war.

In Zeile 5 bewirkt das Plus, dass die Zahl 67 mit Vorzeichen ausgegeben wird, weil sie positiv ist. Bei negativen Zahlen bewirkt das Plus keine Änderung, da dort das Vorzeichen ohnehin angezeigt wird.

In Zeile 6 wird zwischen dem Text "Zahl 67:" und der Zahl "67" ein Leerzeichen ausgegeben. Wird ein Leerzeichen und Plus verwendet, so wird das Leerzeichen nicht beachtet. Daher folgt die Ausgabe "+67" in Zeile 7 unmittelbar hinter dem Text "Zahl 67:".

Das Kanalgitter in Zeile 08 bewirkt, dass vor dem x ein "0x" dargestellt wird. Ein Ausnahme bildet lediglich der Wert 0, weshalb dort kein "0x" vorangestellt wird.

Genau dasselbe steht unter "Bedeutung der Flags"... Grüße --WissensDürster 15:23, 12. Feb. 2009 (CET)

Escape-Sequenzen - Tabelle[Bearbeiten]

Hm, die Escape-Sequenzen sollte man auch in so eine Tabelle stellen, wie bei den Umwandlungszeichen. Das würde optisch besser aussehen, mal sehn ob ich dafür Zeit habe. --WissensDürster 15:43, 12. Feb. 2009 (CET)

c't[Bearbeiten]

Wir werden verlinkt: http://www.heise.de/ct/c-t-Bot-und-c-t-Sim--/projekte/133987/4 :-)

-- MichaelFrey 19:34, 16. Mär. 2009 (CET)

int main () und int main (void)[Bearbeiten]

Was ist der Unterschied? void heißt leer, also vom Logischen her müsste es das gleiche sein?

Nicht ganz: Mit void gibt man an, dass die Funktion keine Parameter hat. Lässt man die Klammern leer kann die Funktion mit beliebig vielen Parametern aufgerufen werden (auch mit keinen, daher funktioniert es).