SUCHE MIT Google
Web virtualuniversity.ch
HOME DIDAKTIK ECDL ELEKTRONIK GUIDES HR MANAGEMENT MATHEMATIK SOFTWARE TELEKOM
DIENSTE
Anmeldung
Newsletter abonnieren
Sag's einem Freund!
VirtualUniversity als Startseite
Zu den Favoriten hinzufügen
Feedback Formular
e-Learning für Lehrer
Spenden
Autoren login
KURSE SUCHEN
Kurse veröffentlichen

Suche nach Datum:

Suche mit Schlüsselwort:

Suche nach Land:

Suche nach Kategorie:
PARTNER
ausbildung24.ch - Ausbildungsportal, Seminare, Kursen... 

 
HTMLopen.de - Alles was ein Webmaster braucht

 
PCopen.de - PC LAN Netze und Netzwerke - alles was ein IT Profi und Systemtechnicker braucht

SOFTWARE
  • Funktionen zur zeichenweisen Ein- und Ausgabe (einschließlich Funktionen zur Ein- und Ausgabe von Zeichenketten)
  • Funktionen zur formatierten Ein- und Ausgabe Anmerkung : Mit Hilfe der in einigen Betriebssystemen (z.B. MS-DOS, UNIX) realisierten Umleitung der Standard-Eingabe und Standard-Ausgabe auf der Kommando-Ebene kann mit diesen Funktionen auch eine Bearbeitung anderer Dateien realisiert werden.

    Mit den Ein-/Ausgabefunktionen der Standard-Bibliothek eng verknüpft ist die Header-Datei

    stdio.h

    In ihr sind die für die Anwendung der Funktionen benötigten Funktionsdeklarationen (Function Prototypes) sowie einige Typen und Konstante (Makros), die mit der Realisierung und Anwendung der Funktionen in Zusammenhang stehen, definiert. U.a. wird die Konstante EOF definiert, die zur C-internen Kennzeichnung des Dateiendes dient. Der Wert dieser int-Konstanten ist nicht mit dem Wert eines eventuellen im Betriebssystem verwendeten Dateiende-Zeichens (z.B. CTRL-D unter UNIX, CTRL-Z unter DOS) identisch, sondern beträgt i. a. -1.

    Zur problemlosen und einfachen Anwendung der Standardbibliotheks-Funktionen ist es daher zweckmäßig die Header-Datei stdio.h mittels

    #include <stdio.h>

    in das C-Programm-Modul einzubinden.

    Die Ausgabefunktion printf

    int printf(controlstring, arg1, arg2, ... )

    Das folgende Programm gleicht dem ersten C-Beispiel:

                                           #include 
                                           
                                           void main(void)
                                             {
                                             printf("Hallo Welt\n");
                                             }
                                           
    Die Ausgabe dieses Programms ist
                                           Hallo Welt 
                                           
    Dahinter kommt ein Zeilenvorschub (\n). Das erste Argument von printf ist ein Formatstring - ein String der das Ausgabeformat beschreibt. Entsprechend den C-Konventionen muß der String mit einem NUL-Zeichen (\0) abgeschlossen sein. Wenn der String als Konstante geschrieben wird, ist automatisch garantiert, daß er richtig abgeschlossen ist.

    Die printf-Funktion kopiert die Zeichen aus dem Format auf die Standardausgabe, bis entweder das Ende des Strings oder ein %-Zeichen erreicht wird. Anstatt das im Format gefundene %-Zeichen auszugeben, sucht printf nach weiteren Zeichen hinter dem %-Zeichen, um herauszufinden, wie das nächste Argument umgewandelt werden soll. Das umgewandelte Argument wird anstelle des %-Zeichens und der nächsten paar Zeichen ausgegeben. Da das Format im obigen Beispiel kein %-Zeichen enthält, entspricht die Ausgabe genau den im Format angegebenen Zeichen. Das Format legt zusammen mit den entsprechenden Argumenten jedes einzelne Zeichen in der Ausgabe fest. Dazu gehört auch der Zeilenvorschub, mit dem eine Zeile abgeschlossen wird.

    Der Rückgabewert von printf ist die Anzahl der ausgegebenen Zeichen.

    Die printf-Funktion hat zwei verwandte Funktionen: fprintf und sprintf. Während printf auf die Standardausgabe schreibt, kann fprintf nur auf eine Ausgabedatei schreiben. Die entsprechende Datei muß in der fprintf-Funktion als erstes Argument angegeben werden. Daher bedeuten printf (Ausgabe); und fprintf(stdout, Ausgabe); exakt dasselbe.

    Die Funktion sprintf wird eingesetzt, wenn die Ausgabe nicht in eine Datei erfolgen soll. Das erste Argument von sprintf ist die Adresse eines Zeichenarrays, in dem sprintf seine Ausgabe ablegt. Daß das Array groß genug ist, um die von sprintf erzeugt Ausgabe aufzunehmen, liegt in der Verantwortlichkeit des Programmierers. Die weiteren Argumente sind identisch mit printf. Die Ausgabe von sprintf wird immer mit einem NUL-Zeichen abgeschlossen. Die einzige Möglichkeit, um ein NUL-Zeichen auf andere Art und Weise auszugeben, ist die Verwendung des Formats %c.

    Alle drei Funktionen liefern als Ergebnis die Anzahl der übertragenen Zeichen zurück. Im Fall von sprintf wird das NUL-Zeichen am Ende der Ausgabe nicht mitgezählt. Wenn printf oder fprintf während des Schreibens auf einen Ein-/Ausgabefehler treffen, geben Sie einen negativen Wert zurück. In diesem Fall kann man nicht mehr feststellen, wieviele Zeichen geschrieben wurden. Da sprintf keine Ein/Ausgabe durchführt, sollte niemals ein negativer Wert zurückgegeben werden.

    Da der Formatstring die Datentypen der weiteren Argumente festlegt und dieser Formatstring während der Ausführung erstellt werden kann, ist es für eine C-Implementierung sehr schwer festzustellen, ob die Argumente von printf die richtigen Datentypen enthalten. Wenn man also printf("%d\n", 0.1); schreibt oder printf (%g\n", 2); dann erhält man nur Unsinn. Es ist aber äußerst unwahrscheinlich, daß dies vor dem Programmstart entdeckt werden kann. Den meisten Implementierungen entgeht auch eine Anweisung wie fprintf("error\n"); Der Programmierer hat hier fprintf verwendet, weil er eine Meldung auf stderr ausgeben wollte, hat aber vergessen, stderr anzugeben. Wahrscheinlich wird das Programm abstürzen, da fprintf den Formatstring als Dateistruktur interpretiert.

    Einfache Formatangaben

    Jedes Formatelement wird mit einem %-Zeichen eingeleitet, hinter dem wenn auch manchmal nicht sofort - ein Zeichen folgt, das als Formatcode bezeichnet wird, mit dem die Art und Weise der Umwandlung bestimmt wird. Andere Zeichen können wahlweise zwischen dem %-Zeichen und dem Formatcode angegeben werden. Diese Zeichen dienen zur näheren Spezifikation des Ausgabeformats und werden später noch ausführlich erläutert. Das häufigste Format ist sicherlich %d, das einen Integerwert in Dezimalschreibweise ausgibt. Zum Beispiel ergibt

    printf ("2 + 2 = %d\n", 2 + 2)

    die Ausgabe 2 + 2 = 4 hinter der ein Zeilenvorschub folgt.

    Das Format %d ist eine Anforderung, daß ein Integer ausgegeben werden soll. Es muß daher ein entsprechendes int-Argument vorliegen. Der Dezimalwert des Integer ersetzt das Format %d ohne vorangestellte oder nachfolgende Nullen während der Kopie auf die Ausgabe. Wenn der Integer negativ ist, wird als erstes Zeichen ein Minuszeichen ausgegeben.

    Das Format %u verarbeitet einen Integer so, als wäre er unsigned. Deshalb ergibt printf("%u\n", -37); auf einer Maschine mit 32-Bit-Integern die Ausgabe 4292967259.

    Beachten Sie, daß char- und short-Argumente automatisch zu einem int erweitert werden. Das kann auf Maschinen, bei denen char-Werte als signed verarbeitet werden, zu einigen Überraschungen führen. Um diese Probleme zu vermeiden, sollten Sie das Formatelement %u für uns igned-Werte reservieren.

    Die Formatelemente %o, %x und %X geben Integerwerte mit der Basis 8 oder 16 aus. Das Element %o liefert oktale Ausgaben, während die Elemente %x und %X hexadezimale Ausgaben erzeugen. Der einzige Unterschied zwischen %x und %X ist:

    • %x liefert die Buchstaben a, b, c, d, e und f für die Werte der Ziffern 10 bis 15.
    • %X verwendet die Buchstaben A, B, C, D, E und F
    Oktale und hexadezimale Werte sind immer vorzeichenlos. Zum Beispiel gibt
                                           int n = 108;
                                           printf("%d dezimal = %o oktal = %x hexadezimal\n", n, n, n); 
                                           
    die Ausgabe
                                           108 dezimal = 154 oktal = 6c hexadezimal
                                           

    Das Formatelement %s dient zur Ausgabe von Strings: Das entsprechende Argument muß Die Adresse eines Strings sein. Die Zeichen werden ab der Stelle, die vom Argument adressiert wird, bis zum ersten erkannten NUL-Zeichen ('\0') ausgegeben. Ein String mit einem %s-Formatelement muß mit einem '\0'-Zeichen abgeschlossen sein. Dies ist die einzige Möglichkeit, damit printf das Ende das Strings erkennen kann. Wenn ein String, der an ein %s-Element übergeben wird, nicht richtig abgeschlossen ist, dann wird printf die Ausgabe solange fortsetzen, bis es irgendwo im Speicher ein '\0'-Zeichen findet. Die Ausgabe kann dann wirklich sehr lang werden.

    Da das Formatelement % s jedes Zeichen im entsprechenden Argument ausgibt, bedeuten printf(s) und printf ("%s", s) nicht dasselbe. Das erste Beispiel behandelt jedes %-Zeichen in s als den Anfang eines Formatcodes. Das kann zu Problemen führen, wenn ein anderer Formatcode als %% vorkommt, da dann das entsprechende Argument fehlt. Das zweite Beispiel gibt jeden mit NUL abgeschlossenen String aus.

    Das Formatelement %c gibt ein einzelnes Zeichen aus: printf ("%c", c) entspricht putchar(c), hat aber den Vorteil, daß man den Wert von c auch in einem größeren Zusammenhang ausgeben kann. Das Argument, das bei einem %c Formatelement angegeben werden muß, ist ein int, der bei der Ausgabe in einen char umgewandelt wir. Zum Beispiel ergibt

    printf("Der Dezimalwert von '%c' ist %d\n", '*', '*');

    die Ausgabe Der Dezimalwert von '*'ist 42

    Drei Formatelemente stehen für die Ausgabe von Fließkommazahlen zur Verfügung: %g, %f und %e. Das Formatelement %g ist am nützlichsten, wenn man Fließkommazahlen darstellen will, die nicht in Spalten ausgegeben werden müssen. Damit wird der entsprechende Wert (der unbedingt ein float oder double sein muß) ohne nachfolgende Nullen mit bis zu sechs signifikanten Ziffern ausgegeben. Zusammen mit math.h ergibt

    printf("Pi = %g\n", 4 * atan(l.0));

    die Ausgabe Pi = 3.14159. Führende Nullen werden in der Genauigkeit nicht berücksichtigt. Die Werte werden nicht abgeschnitten, sondern gerundet: printf("%g\n", 2.0 / 3.0); liefert die Ausgabe 0.666667. Wenn die Zahl größer als 999999 ist, dann würde der Wert entweder mit mehr als sechs signifikanten Stellen oder falsch Wert ausgeben. Das Formatelement %g löst dieses Problem, indem solche Werte in der wissenschaftlichen Schreibweise ausgegeben werden:

    printf("%g\n", 123456789.0);

    liefert die Ausgabe 1.23456e+08 Der Wert wird wiederum auf sechs signifikante Stellen gerundet. Wenn die Größenordnung des Werts zu klein ist, wird die erforderliche Anzahl an Zeichen zur Darstellung der Werte ebenfalls sehr groß. Es ist zum Beispiel sehr unschön, wenn man PI * 10-10 als 0.00000000031459 schreibt. Sowohl kompakter als auch leichter zu lesen ist 3.14159e-10. Diese beiden Darstellungsformen weisen genau dieselbe Länge auf, wenn der Exponent -4 ist (zum Beispiel ist 0.000314159 genauso lang wie 3.14159e-04). Das %g-Formatelement fängt daher erst bei einem Exponenten von -5 mit der wissenschaftlichen Darstellung an.

    Das Formatelement %e verwendet zur Ausgabe von Fließkommazahlen in jedem Fall einen expliziten Exponenten: n wird im %e-Format als 3.141593e+00 ausgegeben. Das Formatelement %e gibt immer sechs Ziffern hinter dem Dezimalpunkt aus, und nicht bloß sechs signifikante Ziffern.

    Mit dem Formatelement % f werden Fließkommazhalne immer ohne einen Exponenten ausgegeben, so daß n als 3.14159 ausgegeben wird. Auch das %f-Format gibt sechs Ziffern hinter dem Dezimalpunkt aus. Ein sehr kleiner Wert kann demnach als Null erscheinen, auch wenn das gar nicht der Fall ist, und eine sehr große Zahl wird mit vielen Ziffern ausgegeben:

    printf("%f\n", le38);

    wird als 10000000000000000000000000000000000000.000000 ausgegeben. Da die Anzahl der hier ausgegebenen Ziffern die Genauigkeit der meisten Computer übersteigt, kann das Ergebnis auf verschiedenen Maschinen unterschiedlich sein.

    Die Formatelemente % E und % G verhalten sich genauso wie die entsprechenden Formatelemente mit Kleinbuchstaben, außer daß der Exponent mit einem großen E und nicht mit einem kleinen e dargestellt wird.

    Das Formatelement %% gibt ein %-Zeichen aus. Es ist insofern einzigartig, als in diesem Fall kein entsprechendes Argument angegeben werden muß. Die Anweisung

    printf("%%d gibt einen Dezimalwert aus\n");

    ergibt also die Ausgabe %d gibt einen Dezimalwert aus.

    Modifizierer

    Die Funktion printf verarbeitet auch noch weitere Zeichen, mit denen ein Formatelement genauer spezifiziert werden kann. Diese Zeichen werden zwischen dem %-Zeichen und dem folgenden Formatcode angegeben.

    Integer gibt es in drei verschiedenen Längen: short, long und int. Wenn ein kurzer Integer als Funktionsargument angegeben wird, wird er automatisch in einen normalen Integer umgewandelt. Das gilt auch für die Funktion printf, aber für die long-Integer benötigen wir noch eine Möglichkeit, um sie zweifelsfrei anzugeben. Dies erreicht man durch ein l direkt vor dem Formatcode, so daß sich dann %ld, %lo, %lx und %lu als neue Formatcodes ergeben. Diese modifizierten Codes verhalten sich dann für long wie ihre nicht modifizierten Entsprechungen.

    Der Modifizierer für die Ausgabebreite vereinfacht die Ausgabe von Werten in Feldern fester Länge. Er wird zwischen dem %-Zeichen und dem nachfolgenden Formatcode angegeben und legt die Mindestanzahl an Zeichen fest, die mit dem entsprechenden Formatelement ausgegeben werden sollen. Wenn der auszugebende Wert das Feld nicht voll ausfüllt, werden Leerzeichen auf der linken Seite eingefügt, damit das Feld breit genug ist. Falls der Wert zu groß für das Feld ist, wird das Feld entsprechend vergrößert. Der Modifizierer für die Ausgabebreite schneidet ein Feld niemals ab. Wenn man mit diesem Modifizierer Zahlenspalten ausgeben will, dann verschiebt ein zu großer Wert die nachfolgenden Werte in der Zeile nach rechts. Der Modifizierer für die Ausgabebreite kann bei allen Formatcodes angegeben werden, sogar bei %%. Beispielsweise gibt die Anweisung printf("%8%\n"); ein rechts ausgerichtetes %-Zeichen in einem acht Zeichen langen Feld aus.

    Der Modifizierer für die Genauigkeit legt die Anzahl der Ziffern in der Darstellung von Zahlen oder Strings fest. Der Modifizierer wird mit einem Dezimalpunkt angegeben, hinter dem mehrere Ziffern folgen. Er steht hinter dem %-Zeichen und dem Modifizierer für die Ausgabebreite, aber immer noch vor dem Formatcode:

    • Bei den Integer-Formatelementen %d, %o, %x und %u gibt dieser Modifizierer die Mindestanzahl der Zeichen an, die ausgegeben werden sollen. Wenn der Wert nicht soviele Ziffern umfaßt, werden Nullen vorangestellt. Die Anweisung printf("%.2d/%.2d/%.4d\n", 7, 14, 1789); ergibt also die Ausgabe 07/14/1789.
    • Bei den Formatelementen %e, %E und %f gibt die Genauigkeit die Anzahl der Ziffern hinter dem Dezimalpunkt an. Wenn die Flags (die wir gleich danach besprechen) nichts anderes angeben, erscheint nur dann ein Dezimalpunkt, wenn die Genauigkeit größer als Null ist. Zum Beispiel:
                                             double pi;
                                             pi = 4 * atan(1.0);
                                             printf("%.Of %.lf %.2f %.3f %.6f %.10f\n", pi, pi, pi, pi, pi, pi); 
                                             printf("%.Oe %.le %.2e %.3e %.6e %.10e\n", pi, pi, pi, pi, pi, pi);
                                             
      die folgende Ausgabe:
                                             3 3.1 3.14 3.142 3.141593 3.1415926536 3e+OO 3.le+OO 3.14e+OO 3.1415926536e+OO
                                             
    • Bei den Formatelementen %g und %G gibt die Genauigkeit die Anzahl der signifikanten Ziffern an, die ausgegeben werden sollen. Wenn in den Flags nichts anderes angegeben wurde, werden alle bedeutungslosen Nullen entfernt und der Dezimalpunkt gelöscht, falls dahinter keine Ziffern mehr folgen.
    • Im Falle der %s-Formatelemente gibt die Genauigkeit an, wieviele Zeichen des entsprechenden Strings ausgegeben werden sollen. Wenn im String nicht genug Zeichen vorhanden sind, um die geforderte Genauigkeit zu erfüllen, wird die Ausgabe gekürzt. Mit Hilfe des Modifizierers für die Ausgabebreite kann die Ausgabe wieder verlängert werden. Mit Hilfe des Formatelements %15.15s wäre garantiert, daß genau 15 Zeichen ausgegeben werden.
    • In den Formatelementen c und % wird die Genauigkeit nicht berücksichtigt.

    Flags

    Zwischen dem %-Zeichen und der Feldbreite können noch weitere Zeichen angegeben werden, mit denen man die Wirkung eines Formatelements weiter beeinflussen kann. Diese Zeichen werden als Flags bezeichnet. Die Flagzeichen haben folgende Bedeutungen:
    • Das Flag - wirkt sich nur dann aus, falls eine Breite angegeben wurde (da man nur dann etwas zum Ausfüllen hat, wenn die Breite größer ist, als es für den Wert notwendig ist). In diesem Fall erscheinen alle Leerzeichen zum Auffüllen auf der rechten, und nicht auf der linken Seite.
      Beim Ausdruck von Strings in Spalten fester Länge sieht es normalerweise besser aus, wenn man sie links ausrichtet. Daher ist ein Format wie %14s meistens ein Fehler und sollte wohl %-14s heißen.
    • Das Flag + gibt an, daß jeder numerische Wert mit einem Vorzeichen als erstes Zeichen ausgegeben werden soll. Es werden also auch alle nicht negativen Werte mit einem Pluszeichen ausgegeben. Das Flag hat keinerlei Bezug zum Flag -.
    • Wenn ein Leerzeichen als Flag verwendet wird, dann bedeutet das, daß ein einzelnes Leerzeichen vor jedem numerischen Wert erscheinen soll, wenn kein Vorzeichen vorhanden ist. Dies wird meist für links ausgerichtete Spalten von Zahlen verwendet, in denen kein Pluszeichen vorkommen soll. Wenn die Flags + und Leerzeichen im selben Formatelement angegeben werden, hat das Flag + den Vorrang. Die Formatelemente % e und %+e sind für die Ausgabe von Zahlenspalten in wissenschaftlicher Schreibweise besser geeignet als das normale Formatelement %e: Durch das Vorzeichen (oder das Leerzeichen) wird sichergestellt, daß alle Dezimalpunkte untereinander stehen.
    • Das Flag # verändert das Format der numerischen Werte geringfügig abhängig von den einzelnen Formatelementen. Beim %o-Format wird die Genauigkeit erhöht, und zwar so weit, daß die erste ausgegebene Ziffer eine 0 ist. Damit können Oktalwerte so ausgegeben werden, wie sie von C-Programmierern am leichtesten erkannt werden. In gleicher Weise stehen bei den Formatelementen %#x und %#X die Zeichenfolgen 0x bzw. 0X vor der Ausgabe.
      Das Flag # erzwingt die Ausgabe eines Dezimalpunkts, auch wenn dahinter keine weiteren Ziffern mehr kommen, und es verhindert das Weglassen nachfolgender Nullen in dem Formaten %g und %G.
    Die Flags sind außer dem Leer- und dem Pluszeichen alle voneinander unabhängig.

    Variable Feldbreite und Genauigkeit

    Viele C-Programme definieren sorgfältig die Länge eines Strings als feste Konstante, damit sie leichter zu ändern ist geben aber die Ausgabebreite in den Ausgabeanweisungen als Integerkonstante an. Es wäre also nicht allzu klug, wenn wir eines unserer früheren Beispiele wie folgt umschreiben würden:
                                           #define NAMESIZE 14 
                                           char name[NAMESIZE];
                                           ...
                                           printf(" ... %.14s ... ", ... , name, ...);
                                           ...
                                           
    Jemand der später einmal NAMESIZE verändern will, wird wahrscheinlich übersehen, daß er alle printf-Aufrufe ebenfalls verändern muß. Es ist jedoch nicht möglich, NAMESIZE direkt in der printf-Anweisung anzugeben:
                                           printf("... %.NAMESIZEs, ...", name, ...);
                                           
    funktioniert nicht, da der Präprozessor innerhalb von Strings keine Ersetzungen vornimmt.

    printf erlaubt daher, daß die Feldbreite oder Genauigkeit indirekt angegeben werden kann. Dazu schreibt man anstelle der Feldbreite oder der Genauigkeit das Zeichen *. In diesem Fall holt sich printf die tatsächlichen Werte aus der Argumentliste, bevor der Wert ausgegeben wird. Im obigen Beispiel sollte es also

                                           printf("... %.*s, ...", ..., NAMESIZE, name, ...);
                                           
    heißen. Wenn die Konvention mit dem * sowohl für die Feldbreite als auch die Genauigkeit verwendet wird, erscheint das Argument mit der Feldbreite zuerst, dahinter kommt das Argument für die Genauigkeit und anschließend der Wert, der ausgegeben werden soll.
                                           printf("%*.*s\n", 12, 5, str);
                                           
    hat also dieselbe Wirkung wie
                                           printf("%12.5s\n", str); 
                                           
    Wenn das Zeichen * für die Feldbreite verwendet wird und der entsprechende Wert negativ ist, hat das denselben Effekt, als ob das Flag - ebenfalls angegeben worden wäre.

    Zusammenfassung: Formatierte Ausgabe in C mit "printf"

    Allgemeine Form: printf(Controlstring, Arg1, Arg2, ... )
    Controlstring: Ausgabe von Text und Steuerung der Ausgabeformte. Er kann enthalten:
    • darstellbare Zeichen
    • Zeichenersatzdarstellungen ('\n', '\t' usw.)
    • Umwandlungsspezifikationen
    Arg1, Arg2, ...:: Die auszugebenden Werte (Argumente). Anzahl und Typ sind durch den "controlstring" festgelegt
    Umwandlungsspezifikation: Sie haben die Form:
    %[Formatangabe]Konvertierungszeichen

    Konvertierungszeichen:
    c  Einzelzeichen
    d, i  Integerzahl (dezimal,konegativ)
    u  Integerzahl (dezimal,nur positev)
    o  Integerzahl (oktal, nur positev, ohne führende "0")
    x, X  Integerzahl (sedezimal, nur positev, ohne führende "0x")
    e, E  Gleitpunktzahl (float oder double) in Exponentendarstellung
    f  Gleitpunktzahl (float oder double) in Dezimalbruchdarstellung
    g, G  kürzeste Darstellung von e oder f
    s  String
    p  Pointer (implementierungsabhängige Darstellung)

    Formatangabe:

    Die Eingabefunktion scanf

    scanf(controlstring, arg1, arg2, ... )

    "scanf" liest die naechsten Zeichen von stdin, interpretiert sie entsprechend den im Steuerstring "controlstring" vorliegenden Typ- und Formatanangaben und weist die dem geäß konvertierten Werte den durch ihre Adresse referierten Variablen arg1, arg2, ... zu. Anzahl und Typ der Variablen sind durch "controlstring" festgelegt.

    Die der Zeichen-Werte-Konvertierung zugrundeliegenden Umwandlungsspezifikationen werden durch White-Space-Character (Blank, Tab, Newline) bzw. durch Längenangaben im Steuerstring getrennt.

    Funktionswert: Die Anzahl der erfolgreich zugewiesenen Werte bzw. EOF (= -1), wenn beim Lesen des ersten Wertes versucht wurde, über die Eingabe des Dateiendezeichens hinaus zu lesen.

    Die Umwandlungsspezifikation haben ein einheitliches Format:

                                           %[*][ziff]Konvertierungszeichen
                                             ¦   ¦
                                             ¦   maximale Eingabefeldgröße (Kann weggeleassen werden.
                                             ¦   Bei Konvertierungszeichen c: Anzahl der einzulesenden Zeichen.)
                                             ¦
                                             Zeichen zum Überlesen des nächsten Eingabefeldes 
                                             (assignment suppression; kann weggeleassen werden.)
                                           

    Konvertierungszeichen:

    cZeichen(-folge) (auch blanks, tabs und newlines werden gelesen)
    Default (keine Feldgrößenangabe): 1 Zeichen
    dInteger (dezimal)
    iInteger (dezimal) oder oktal (mit führender "0") oder sedezimal (mit führendem "0x" bzw "0X")
    oInteger (oktal, mit oder ohne führende "0")
    xInteger (sedezimal, mit oder ohne führendem "0x" bzw "0X")
    uInteger (dezimal, nur positev)
    e, f, gGleitpunktzahl (beliebige Darstellung)
    sString (Ergänzung mit abschließendem '\0')
    pPointer

    h vor d,i,o,u,xKurze Integerzahl (short)
    l vor d,i,o,u,xLange Integerzahl (long)
    l vor e,f,g double
    L vor e,f,g long double

    Beispiel:

                                             int   i, jwert;
                                             float zahl;
                                             ...
                                             scanf("%2d %f %*d %d",&i,&zahl,&jwert)
                                             ...
                                           
    Nach Eingabe von: 56789 0123 457 haben die Variablen folgende Werte: i = 56, zahl = 789.0, jwert = 457. Die Zahl 0123 wird überlesen!

    Die Eingabefunktion gets

    char *gets(char *s);

    "gets" liest die nächsten Zeichen von stdin bis zum nächsten Newline-Character ('\n') bzw bis das Dateiende erreicht ist. Die gelesenen Zeichen werden in dem durch "s" referierten String ohne eventuell gelesenes '\n' abgelegt. An s wird automatisch Das Stringende-Zeichen '\0'angehängt. Funktionswert ist die Anfangsadresse des Strings "s" oder ein NULL-Pointer bei Erreichen des Dateiendes ohne vorheriges Lesen von Zeichen. Im Fehlerfall wird ebenfalls ein NULL-Pointer zurückgegeben. Es wird nicht überprüft, ob genügend Speicherplatz für den String zur Verfügung steht.

    Die Ausgabefunktion puts

    int puts(const char *s);

    "puts" gibt den durch "s" referierten String (ohne '\0'-Character!) nach stdout aus, wobei ein abschließendes '\n' angefügt wird. Funktionswert ist ein nicht-negativer Wert bei Fehlerfreiheit und EOF (-1) im Fehlerfall.

    Beispiel:

                                           /* String einlesen und wieder ausgeben */
                                           #include <stdio.h>
                                           
                                           char str[100];
                                           
                                           void main(void)
                                             {
                                             if (gets(str) != NULL)
                                               puts(str);
                                             else
                                                printf("Leereingabe\n");
                                             }
                                           

    Die Eingabefunktion getchar

    int getchar(void);

    "getchar" liest das nächste Zeichen von stdin und gibt das gelesene Zeichen (als int-Wert zurück. Bei Eingabe des Fileendezeichens für Textdateien oder im Fehlerfall wird EOF (-1) zurückgegeben.

    Beispiel:

                                           /* Zeichen kopieren von stdin nach stdout */
                                           #include <stdio.h>
                                           
                                           int ch;
                                           
                                           void main(void)
                                             {
                                             while ((ch = getchar()) != EOF)
                                               putchar(ch);
                                             }
                                           

    Die Ausgabefunktion putchar

    int putchar(int c);

    "putchar" gibt das Zeichen "c" (nach Umwandlung in unsigned char) nach stdout aus. Funktionswert: das ausgegebene Zeichen (als int-Wert) oder EOF (-1) im Fehlerfall.

  • DIPLOMARBEITEN UND BÜCHER

    Diplomarbeiten zum Runterladen:

    Suche im Katalog:
    Architektur / Raumplanung
    Betriebswirtschaft - Funktional
    Erziehungswissenschaften
    Geowissenschaften
    Geschichtswissenschaften
    Informatik
    Kulturwissenschaften
    Medien- und Kommunikationswissenschaften
    Medizin
    Psychologie
    Physik
    Rechtswissenschaft
    Soziale Arbeit
    Sozialwissenschaften


    JOBS
    HOME | E-LEARNING | SITEMAP | LOGIN AUTOREN | SUPPORT | FAQ | KONTAKT | IMPRESSUM
    Virtual University in: Italiano - Français - English - Español
    VirtualUniversity, WEB-SET Interactive GmbH, www.web-set.com, 6301 Zug

    Partner:   Seminare7.de - PCopen.de - HTMLopen.de - WEB-SET.com - YesMMS.com - Ausbildung24.ch - Manager24.ch - Job und Karriere