Grundlagen der Informatik Einführung in die Programmiersprache C Teil 2 Ein- und Ausgabe in C-Programmen Prof. Dr.-Ing. Thomas Wiedemann Fachgebiet Informatik / Mathematik Überblick zur Vorlesung Ein- und Ausgabe in C-Programmen • Ausgabe von Daten auf dem Bildschirm • Eingabe von Daten von der Tastatur • Anwendungsbeispiele Grundlagen der Informatik I - 1 - T.Wiedemann- Seite 2 •1 Aus- und Eingabe von Daten Allgemeine Anforderungen • eine nur auf sich selbst bezogene Berechnung ist kaum sinnvoll Ausgaben sind notwendig zur • Darstellung von Ergebnissen • Information über den Verlauf von Berechnungen • teilweise auch zur Fehlersuche Eingaben dienen • zur Eingabe von variablen Berechnungsparametern • zur Steuerung der Berechnungsablaufes Grundlagen der Informatik I - 1 - T.Wiedemann- Seite 3 Aus- und Eingabegeräte Analog zu Ihrer historischen Entwicklung existieren folgende Geräte, welche sich mit den angegebenen Abkürzung in C direkt ansprechen lassen : • Konsole (con), bestehend aus Tastatur und Bildschirm im reinen Textmodus – Tastatur enthält bei PC´s einen eigenen Mikroprozessor zur Verarbeitung der Eingaben und liefert teilweise relativ komplizierte Tastaturcodes – Bildschirm wird vom Prozessor angesteuert und zeigt entweder über einen Zeichengenerator (DOS) oder Grafikcontroller mit geladenen Schriftsätzen (Fonts) die Buchstaben als Pixel an • Dateien („Dateiname“) im Lese- und Schreibmodus • Drucker (prn) als reine Ausgabegeräte mit dem Problem der Ansteuerung von Sonderzeichen und Grafik (früher reine Textausgabe) • Scanner und andere Bildverarbeitungsgeräte seit 1995 zusätzlich auch Einlesen und Ausgabe per Internet: • Internetserver („http://...“ , „ftp://...“ ) Grundlagen der Informatik I - 1 - T.Wiedemann- Seite 4 •2 Arten der Aus- und Eingabe in C Je nach Anforderung können verschiedene Arten der Ein- und Ausgabe verwendet werden: • Zeichenweise Ein- und Ausgabe – sinnvoll nur für die Eingabe einzelner Zeichen – z.B. zur Steuerung des Programmablaufs oder Befehlsauswahl • Ein- und Ausgabe von Texten – für die reine Textverarbeitung – - z.B. für Eingabe von Adreßdaten, Textverarbeitung • Formatierte Ein- und Ausgabe – Eingabe von Text und Umwandlung des Textes in andere Datenformate – für alle Zahleneingaben Anwendungshinweis: Da mit der formatierten Ein- und Ausgabe können prinzipiell auch Texte oder Einzelzeichen ausgegeben werden, wird diese sehr oft verwendet. Grundlagen der Informatik I - 1 - T.Wiedemann- Seite 5 Zeichenweise Ausgabe • C stellt spezielle Funktionen für die Ein- und Ausgabe zur Verfügung • diese gehören jedoch nicht zum Standardbefehlssatz von C • deshalb muß die Bibliothek #include <stdio.h> eingebunden werden ! Zeichenweise Ausgabe in C – mit der Funktion putchar(char c) wird genau ein Zeichen ausgegeben char c; // definiert eine Variable vom Typ Zeichen c= 'h' ; // weist Buchstaben zu putchar ( c ) ; // gibt den Wert von c – hier 'h' auf dem Bildschirm aus - es ist auch ein Aufruf mit direkter Angabe des auszugebenden Zeichens möglich putchar ( 'H' ) ; putchar ( 'a' ) ; putchar ( 'l' ) ; putchar ( 'l' ) ; putchar ( 'o' ) ; // gibt den Text Hallo auf dem Bildschirm aus // sollte aber NICHT SO VERWENDET werden – es gibt effizientere Optionen Grundlagen der Informatik I - 1 - T.Wiedemann- Seite 6 •3 Zeichenweise Eingabe • analog zur zeichenweisen Ausgabe werden in der gleichen Bibliothek <stdio.h> auch mehrere Funktionen zur Eingabe bereitgestellt Zeichenweise Eingabe in C • mit der Funktion int getch() wird 1 Zeichen von der der Tastatur abgefragt : – falls kein Zeichen gedrückt vorhanden ist, WARTET die Funktion auf die nächste Eingabe und kommt erst dann zurück – sinnvoll zum Anhalten des Programm (schlecht für laufende Abfragen..) – Bsp.: char c; // definiert eine Variable vom Typ Zeichen c = getch(); // holt Wert von der Tastatur oder wartet auf Eingabe • Die Funktion int getche() arbeitet genauso wie getch(), gibt jedoch noch das eingegebene Zeichen selbst auf dem Bildschirm aus (das e steht für Echo) • ACHTUNG: Einige Spezialtasten, wie die Taste Einfügen oder Funktionstasten geben für einen Tastendruck mehrere Werte zurück. Diese sind ggf. kombiniert auszuwerten. (siehe Übung Strings im nächsten Semester) • Mit int kbhit( void ) kann auf Vorliegen von Tastendrücken getestet werden ! Grundlagen der Informatik I - 1 - T.Wiedemann- Seite 7 Zeilenweise Ein- und Ausgabe von Texten • analog zur zeichenweisen Ein- und Ausgabe werden Funktionen zur zeilenweise Ein- und Ausgabe bereitgestellt • Zeilenweise Ausgabe von Texten puts(char *text) ; Bsp.: puts( "Hallo Welt " ); puts( Vorname ); puts( Nachname ); • Zeilenweise Eingabe von Texten gets( char *text ); Bsp.: char textpuffer[80]; gets( textpuffer); // liest Zeichen bis Entertaste auf Textpuffer ein puts( textpuffer); // ... und gibt die Zeichen wieder aus Grundlagen der Informatik I - 1 - T.Wiedemann- Seite 8 •4 Formatierte Ein- und Ausgabe • dient meist zum Ausgeben und Ausgeben von Zahlen in Kombination mit Texten Formatierte Ausgabe • Basisbefehl printf ( text , { Argumente } ) ; // { } optional • wieder aus Bibliothek #include <stdio.h> • kann prinzipiell alle Datentypen ausgeben ! • einfachste Form : printf("Hallo Ihr"); // analog zu puts • bei der Ausgabe von Zahlen kann in printf – die Position und die Zahlenformatierung sehr genau gesteuert werden int x; float y; printf("x-Wert= %d y-Wert = %f ", x , y ); Formatierungstext beliebig viele Variablen – %-Zeichen im Text dienen als Platzhalter für die Zahlenwerte – Angaben nach dem %-Zeichen definieren die genaue Formatierung des Wertes – die Werte müssen GENAU in der Reihenfolge der %-Angaben in der Liste stehen !!! Grundlagen der Informatik I - 1 - T.Wiedemann- Seite 9 Formatierte Eingabe • analog existiert eine Funktion zum formatierten Eingeben der Basisbefehl der Basisbefehl zum Einlesen von Daten von der Tastatur lautet scanf("%f ", &y ); Formatierungstext beliebig viele Variablen mit Angabe der Adresse (&) ! Wichtige Regeln: • da Daten zurückgegeben werden sollen, muß als Übergabeparameter eine ADRESSE angegeben werden – dies bewirkt der Operator & • eine direkte Angabe eines Wertes führt in der Regel zu Programmabstürzen • die Formatierungsangaben entsprechen fast immer denen von printf (siehe Folgefolie und zusätzliches Arbeitsblatt) • eine Nichtübereinstimmung von %_-Angabe und dem Datentyp führt meist zu falschen Eingabewerten (meist Null oder zufällige Zahlenwerte) Grundlagen der Informatik I - 1 - T.Wiedemann- Seite 10 •5 Formatierungscodes für Aus- und Eingabebefehle in C • ACHTUNG: Der Typ der Variablen und der Formatierungscode MUSS GENAU ÜBEREINSTIMMEN !!!!!!! • Falls nicht, sind sehr schwer auffindbare Fehler möglich : – es kommt zu absolut falschen Ausgaben (Text wird als Zahl interpretiert) – sind Abstürze und völliges Versagen des Programmes möglich Ganze Zahl: int x; printf("%i",x); scanf("%i", &x); Gleitkomma: float y; printf("%f",y); scanf("%f", &y); Gleitkomma: double y; printf("%f",y); scanf("%lf", &y); Text: printf("%s",s); scanf("%s", &s); char s[10]; Diese 3 Grundtypen sind auswendig zu lernen. Alle anderen 25 Codes (und teilweise noch mehr) sind den Dokumentationen der Compiler zu entnehmen ! Grundlagen der Informatik I - 1 - T.Wiedemann- Seite 11 Spezialzeichen zur Steuerung der Ausgabe • Neben der reinen Textausgabe sind Steuerzeichen erforderlich. • Diese werden in C (und auch Java) als Kombination von \ und einem Buchstaben kodiert: – \n neue Zeile bei der Ausgabe • Bsp.: printf("Werte \n x=%i \n y=%f", x, y); // erzeugt 3 Zeilen – \t springt zu Tabulatorposition (meist Vielfaches von 8) • Bsp.: printf("Werte: \t x=%i \t y=%f", x, y); // alles auf einer Zeile mit Tabs – \" erzeugt im Text ein " (sonst würde der Compiler ein Textende annehmen) – \\ erzeugt im Text genau ein \ (sonst würde der Compiler ein \.. annehmen) – \% erzeugt Prozentzeichen Grundlagen der Informatik I - 1 - T.Wiedemann- Seite 12 •6