Programmieren in C

von Prof. Dr. Rainer Thomas

3. Ein- und Ausgabe über die Konsole

3.1 Allgemeines
3.2 Zeichenweise Ein- und Ausgabe
3.3 Formatierte Ein- und Ausgabe


3.1 Allgemeines

Ein- und Ausgabe über die Konsole in C


3.2 Zeichenweise Ein- und Ausgabe

C-Standardbibliotheks-Funktionen zur zeichenweisen Ein- und Ausgabe von/nach "stdin"/"stdout"

/* -------------------------------------------------------------------- */
/*          getchar       -       Zeichenweise Eingabe von stdin        */
/* -------------------------------------------------------------------- */

#include <stdio.h>                 /* enthält Funktionsdeklaration */

int getchar(void);
getchar liest das naechste Zeichen von stdin.
Funktionswert :
das gelesene Zeichen (als int-Wert, mit führenden 0 ergänzt !)

bzw. EOF (= -1) bei Eingabe des Fileendezeichens für Textfiles oder im Fehlerfall
/* -------------------------------------------------------------------- */
/*          putchar       -       Zeichenweise Ausgabe nach stdout      */
/* -------------------------------------------------------------------- */

#include <stdio.h>                 /* enthält Funktionsdeklaration */

int putchar(int c);
           /* c     auszugebendes Zeichen */
putchar gibt das Zeichen "c" (nach Umwandlung in unsigned char) nach stdout aus
Funktionswert :
das ausgegebene Zeichen (als int-Wert, mit führenden 0 ergänzt !)

bzw. EOF (= -1) im Fehlerfall

C-Standardbibliotheks-Funktionen zur Ein- und Ausgabe von Zeichenfolgen von/nach "stdin"/"stdout"

/* -------------------------------------------------------------------- */
/*          gets       -      Eingabe einer Zeichenfolge von stdin      */
/* -------------------------------------------------------------------- */

#include <stdio.h>                 /* enthält Funktionsdeklaration */

char *gets(char *s);

            /* s   String zum Ablegen der gelesenen Zeichenfolge */
gets liest die nächsten Zeichen von stdin bis zum nächsten NL-Character ('\n') bzw bis das Dateiende erreicht ist.
Die gelesenen Zeichen werden in dem durch "s" referierten String - ohne eventuell gelesenen '\n'-Character - einschließlich eines angefügten '\0'-Characters abgelegt.
Funktionswert :
- String "s"
- bzw. NULL-Pointer bei Erreichen des Dateiendes ohne vorheriges Lesen von Zeichen oder im Fehlerfall 
/* -------------------------------------------------------------------- */
/*        puts       -       Ausgabe eines Strings nach stdout          */
/* -------------------------------------------------------------------- */

#include <stdio.h>                 /* enthält Funktionsdeklaration */

int puts(const char *s);

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

Weitere Funktionen der TURBO-C-Bibliothek zur zeichenweise Eingabe von "stdin"

/* -------------------------------------------------------------------- */
/*      getch     -     Zeichenweise ungepufferte Eingabe von stdin     */
/* -------------------------------------------------------------------- */

#include <conio.h>                 /* enthält Funktionsdeklaration */

int getch(void);
getch liest das naechste Zeichen ungepuffert von stdin (und erzeugt keine Echo-Ausgabe).
Funktionswert :
das gelesene Zeichen (als int-Wert, mit führenden 0 ergänzt !)

(Das Erreichen des Dateiendes bzw. das Auftreten eines Fehlers wird nicht durch ein spezielles Zeichen angezeigt)
Anmerkungen :
- Die Eingabe von CTRL-Z wird nicht als Dateiende interpretiert
- Diese Funktion ist keine ANSI-C-Funktion
/* -------------------------------------------------------------------- */
/*   getche  -   Zeichenweise ungepufferte Eingabe von stdio mit Echo   */
/* -------------------------------------------------------------------- */

#include <conio.h>                 /* enthält Funktionsdeklaration */

int getche(void);
getche liest das naechste Zeichen ungepuffert von stdin und gibt es als Echo nach stdout aus.
Funktionswert :
das gelesene Zeichen (als int-Wert, mit führenden 0 ergänzt !)

(Das Erreichen des Dateiendes bzw. das Auftreten eines Fehlers wird nicht durch ein spezielles Zeichen angezeigt)
Anmerkungen :
- Die Eingabe von CTRL-Z wird nicht als Dateiende interpretiert
- Diese Funktion ist keine ANSI-C-Funktion


3.3 Formatierte Ein- und Ausgabe

C-Standard-Bibliotheks-Funktionen zur formatierten Ein- und Ausgabe von/nach "stdin"/"stdout"

/* -------------------------------------------------------------------- */
/*          scanf         -       Formatierte Eingabe von stdin         */
/*--------------------------------------------------------------------- */

#include <stdio.h>                /* enthält Funktionsdeklaration */

int scanf(const char *ctrl, ...);

       /* ctrl   String zur Festlegung des Eingabeformats               */
       /* ...    weitere Parameter:  Pointer auf Variable,              */
       /*                            die Eingabewerte aufnehmen sollen  */
scanf liest die naechsten Zeichen von stdin, interpretiert sie entsprechend den im Steuerstring ctrl vorliegenden Typ- und Formatanangaben und weist die demgemaess konvertierten Werte den durch ihre Pointer (weitere Parameter !) referierten Variablen zu.

Die der Zeichen-Werte-Konvertierung zugrundeliegenden "Eingabefelder" 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 Fileendezeichens für Textfiles hinaus zu lesen 
Aufbau und Bedeutung des Steuerstrings ctrl siehe gesonderter Umdruck
 
 
/* -------------------------------------------------------------------- */
/*          printf        -       Formatierte Ausgabe nach stdout       */
/*--------------------------------------------------------------------- */

#include <stdio.h>                /* enthält Funktionsdeklaration */

int printf(const char *ctrl, ...);

       /* ctrl   String zur Festlegung des Ausgabeformats               */
       /* ...    weitere Parameter:  Ausgabewerte, Anzahl und Typ ent-  */
       /*                    sprechend Konvertierungszeichen in "ctrl"  */
printf gibt die als weitere Parameter übergebenen Werte entsprechend den Formatangaben in ctrl als Zeichenfolgen nach stdout aus.
Funktionswert :
Anzahl der ausgegebenen Zeichen
Aufbau und Bedeutung des Steuerstrings ctrl siehe gesonderter Umdruck
 
 

Formatierte Ausgabe in C mit "printf"

Beispiele zur formatierten Ausgabe in C

/* ------------------------------------------------------------------ */
/* Programm FORMAUS                                                   */
/* ------------------------------------------------------------------ */
/* Beispiele fuer die formatierte Ausgabe mit "printf()"              */
/* TURBO-C  2.0                                                       */
/* ------------------------------------------------------------------ */

#include<stdio.h>

#define GRUSS    "hello, world"
#define GRENZ    putchar(':')
#define WRITELN  putchar('\n')

void main(void)

{ char   zeich ='a';
  float  bruch = 3128.4503;
  double dopg  = 3128.4503146;
  int    ganz  = 641;
  int    ges = 14,  nach =4;
                                                   /*      Ausgabe      */

  GRENZ;  printf("%c",zeich);     GRENZ; WRITELN;  /* :a:               */
  GRENZ;  printf("%s",GRUSS);     GRENZ; WRITELN;  /* :hello, world:    */
  GRENZ;  printf("%d",ganz);      GRENZ; WRITELN;  /* :641:             */
  GRENZ;  printf("%f",bruch);     GRENZ; WRITELN;  /* :3128.450195:     */
  GRENZ;  printf("%f",dopg);      GRENZ; WRITELN;  /* :3128.450315:     */
  GRENZ;  printf("%e",bruch);     GRENZ; WRITELN;  /* :3.12845e+03:     */
  GRENZ;  printf("%e",dopg);      GRENZ; WRITELN;  /* :3.12845e+03:     */
  WRITELN;
  GRENZ;  printf("%10d",ganz);    GRENZ; WRITELN;  /* :       641:      */
  GRENZ;  printf("%010d",ganz);   GRENZ; WRITELN;  /* :0000000641:      */
  GRENZ;  printf("%-10d",ganz);   GRENZ; WRITELN;  /* :641       :      */
  GRENZ;  printf("%-010d",ganz);  GRENZ; WRITELN;  /* :641       :      */
  GRENZ;  printf("%3o",ganz);     GRENZ; WRITELN;  /* :1201:            */
  WRITELN;
  GRENZ;  printf("%12f",bruch);   GRENZ; WRITELN;  /* : 3128.450195:    */
  GRENZ;  printf("%012f",bruch);  GRENZ; WRITELN;  /* :03128.450195:    */
  GRENZ;  printf("%12.2f",bruch); GRENZ; WRITELN;  /* :     3128.45:    */
  GRENZ;  printf("%12e",bruch);   GRENZ; WRITELN;  /* : 3.12845e+03:    */
  GRENZ;  printf("%12.2e",bruch); GRENZ; WRITELN;  /* :     3.1e+03:    */
  GRENZ;  printf("%+*.*e",ges, nach, bruch);
                                  GRENZ; WRITELN;  /* :    +3.128e+03:  */
  WRITELN;
  GRENZ;  printf("%5s",GRUSS);    GRENZ; WRITELN;  /* :hello, world:    */
  GRENZ;  printf("%15s",GRUSS);   GRENZ; WRITELN;  /* :   hello, world: */
  GRENZ;  printf("%015s",GRUSS);  GRENZ; WRITELN;  /* :   hello, world: */
  GRENZ;  printf("%-15s",GRUSS);  GRENZ; WRITELN;  /* :hello, world   : */
  GRENZ;  printf("%15.5s",GRUSS); GRENZ; WRITELN;  /* :          hello: */
  GRENZ;  printf("%-15.5s",GRUSS);GRENZ; WRITELN;  /* :hello          : */
  WRITELN;
  GRENZ;  printf("%p",&bruch);    GRENZ; WRITELN;  /* :FFD6:            */
  GRENZ;  printf("%Np",&bruch);   GRENZ; WRITELN;  /* :FFD6:            */
  GRENZ;  printf("%Fp",(void far *)&bruch);
                                  GRENZ; WRITELN;  /* :1D04:FFD6:       */
}
 

Formatierte Eingabe in C mit "scanf"

Einlesen von Strings mit "gets()" und "scanf()"



Zum Inhaltsverzeichnis Zum nächsten Abschnitt


Copyright © FH München, FB 04, Prof. Dr. Rainer Thomas
V - PC - 311 - 00 - TH - 01
V - PC - 321 - 00 - TH - 03
V - PC - 322 - 00 - TH - 01
V - PC - 324 - 00 - TH - 01
V - PC - 332 - 00 - TH - 05
V - PC - 341 - 00 - TH - 08
V - PC - 343 - 00 - TH - 07
V - PC - 344 - 00 - TH - 07
V - PC - 345 - 00 - TH - 02