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 %-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 beliebig viele Variablen 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: char s[10]; printf("%s",s); scanf("%s", &s); 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