ein Kapitel zurück                                           ein Kapitel weiter

Jetzt haben wir schon einiges zu dem Thema der Zeichenketten erfahren. Aber damit sie interaktive Programme schreiben können fehlt uns noch die Möglichkeit wie wir Zeichenketten Einlesen und wieder Auslesen können. Denn folgendes wird nicht richtig funktionieren....

/*Download:stringio1.c*/
#include <stdio.h>

int main()
{
char eingabe[100];

scanf("%s",&eingabe[0]);
printf("%s",eingabe);
return 0;
}

Testen sie das Programm mal und geben sie einen Satz ein wie z.B....

Heute ist ein schöner Tag!

...und unsere printf - Anweisung wird ausgeben...

Heute

Wieso das werden sie sich jetzt fragen? Wir haben doch einen String mit der Größe von 99 Zeichen initialisiert. Nun das Problem liegt an der Funktion scanf! scanf liest unseren String den wir eingeben nur bis zum ersten Leerzeichen und gibt es dann aus. Wir brauchen also eine andere Lösung zur Eingabe eines Strings. Hierzu verwenden wir die ebenfalls in der Headerdatei <stdio.h

/*Download:stringio2.c*/
#include <stdio.h>

int main()
{
char eingabe[100];

gets(eingabe);
printf("%s",eingabe);
return 0;
}

Versuchen sie jetzt nochmals einen Satz einzugeben und es funktioniert. Wir geben an der Funktion 'gets' die Adresse von 'eingabe' und können diese somit überschreiben.

Zu der Variante 'gets' gibt es, wie bei scanf das printf ist, auch ein Gegenstück nämlich die Funktion 'puts' die einen String ausgibt. Jetzt nochmals unsere Programm mit 'puts'....

/*Download:stringio3.c*/
#include <stdio.h>

int main()
{
char eingabe[100];

gets(eingabe);
puts(eingabe);
return 0;
}

Ich glaube dazu brauche ich nichts zu sagen!? Hier noch mal ein kleines Beispiel....

/*Download:stringio4.c*/
#include <stdio.h>
#include <string.h>

int main()
{
char name[20];
char feeling[10];

printf("Wie lautet hier Name : ");
gets(name);
printf("Hallo %s, wie geht dir heute ?",name);
gets(feeling);

if((strcmp(feeling,"gut")==0))
printf("Freut mich zu hören!\n");

else if((strcmp(feeling,"schlecht")==0))
printf("Es werden wieder bessere Tage kommen!\n");

else
printf("%s kenn ich nicht! Kenn nur 'gut' o. 'schlecht'\n",feeling);

return 0;
}

Hier haben wir mal ein richtiges interaktives Programm im Dialog mit dem PC. Der PC fragt nach Ihrem Namen und Ihr Wohlbefinden und wertet das Wohlbefinden anschließend aus ob sie 'gut' oder 'schlecht' eingegeben haben. Das Überprüfen wir mittels....

if((strcmp(feeling,"gut")==0))

Wir haben die Funktion 'strcmp' bereits im Kapitel zuvor kennen gelernt. Bei Gleichheit liefert uns die Funktion 0 zurück, andernfalls einen Wert ungleich 0. Wenn sie nicht mehr wissen wieso schauen sie sich das Kapitel zuvor nochmals an.

Jetzt gibt es noch ein weiteres "Pärchen" zur Behandlung von char - Typen die uns sehr Hilfreich beim bearbeiten von Strings sind. Nämlich die Funktionen 'getchar' zum Einlesen einzelner Zeichen und 'putchar' zum Ausgeben einzelner Zeichen auf dem Bildschirm. Beide Funktionen sind ebenfalls in der Headerdatei <stdio.h

/*Download:stringio5.c*/
#include <stdio.h>

int main()
{
int c;

while((c = getchar()) !='.'); fflush(stdin);
printf("Weiter mit Taste <ENTER> \n");
getchar();
printf("Bye-bye\n");

return 0;
}

'getchar' dient zum Einlesen einzelner Zeichen von Tastatur. Sie werden jetzt sicher verwundert sein das der Rückgabewert von 'getchar' vom Typ 'int' ist. Nun das liegt daran das ein char vor seiner Verwendung in einem Ausdruck in ein 'int' konvertiert wird. Wenn Ihnen der tiefere Hintergrund darüber interessiert können sie den Text im folgenden Rahmen lesen, wenn nicht können sie ihn auch überspringen.

Das Problem der Verwendung von int liegt an der Konstanten EOF (End of File) die das Ende einer Eingabe anzeigt. EOF ist meist als -1 definiert, damit sie nicht mit den normalen ASCII - Zeichen kollidiert. Nun früher als noch 127 Zeichen verwendet wurden war das kein Problem. Heute kommt es oft vor das Zeichen größer wie 127 gelesen werden wie z.B. ä,ö,ü.....! Daher wird char oft mit unsigned deklariert und kann somit Zeichen zwischen 0...255 lesen. Nun ist aber kein Platz mehr für EOF. Man hat dann einfach den Rückgabewert von 'getchar' als int deklariert und damit können sowohl die 256 Zeichen als auch das EOF übermittelt werden.

Nun zurück zu unserem Programm. Mit...

while((c = getchar()) !='.');

...können wir so viele Zeichen und Zeilen eingeben wie wir wollen bis sie einen Punkt '.' eingeben und <ENTER

printf("Weiter mit Taste \n");
getchar();


Auch hier könnten jeglichen Murks eingeben aber beenden werden sie das Programm erst mit <ENTER

while((c = getchar()) !=EOF);

werden sie ewig Zeichen eingeben bis sie Alt und Grau sind. Es sei denn sie drücken die Tastenkombination die für EOF steht. Für DOS währen das <STRG

Nun zur Unformatierten Ausgabe mit 'putchar'. Hier ein Beispiel...

/*Download:stringio6.c*/
#include <stdio.h>

int main()
{
int c;

while((c = getchar()) !='.')
putchar(c);

return 0;
}

Hier haben wir nichts anderes als einen Papagei. Wenn sie z.B. eingeben "Hallo Welt" und anschließend <ENTER

Das war nur ein kurzer Überblick von ein paar Elementare E/A - Funktionen. Mehr solche Funktionen und Vor.-bzw. Nachteile einzelner Funktionen kommen ein paar Kapitel später dran

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf