+ C - Formatierte Eingabe mit scanf()

Ähnliche Dokumente
GI Vektoren

Grundlagen der Programmierung

+ C - Formatierte Ausgabe mit printf()

Programmiersprachen Einführung in C

Ein- und Ausgabe von Daten

1.6 Programmstrukturen/Abweisende Schleife

Programmieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff

Programmieren in C (Übungsblatt 1)

Programmieren in C (Übungsblatt 1)

Rechenzentrum. Programmieren in C. Simone Knief Rechenzentrum der CAU

Grundlagen der Programmierung

FH München, FB 03 FA WS 06/07. Ingenieurinformatik. Name Vorname Matrikelnummer Sem.Gr.: Hörsaal Platz

Programmieren in C (Übungsblatt 1)

+ C - Array (Vektoren, Felder)

Schleifenanweisungen

Anwendung höherer Programmiersprachen. Formatierte Ausgabe mit cout. Angewandte Informatik I C / C++ Teil B: Formatierte Ein- und Ausgabe

Zeichenketten. Peter Sobe

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

Arrays (Felder/Vektoren)

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

Strings (Zeichenketten)

Grundlagen der Informatik

Ein-/Ausgabe, Dateisystem. Kapitel 9: Ein-/Ausgabe. Programmieren in C für Elektrotechniker. Programmieren in C. Dateisystem. Programmieren in C

Verwenden Sie für jede Aufgabe die C++ IDE von Eclipse (pro Aufgabe ein Projekt).

Programmieren in C/C++ und MATLAB

Kurze Einführung in die Programmiersprache C++ und in Root

einlesen n > 0? Ausgabe Negative Zahl

In diesen Canvas können Punkte an gültigen Koordinaten gezeichnet werden.

4. Einfache Programmstrukturen in C Einfache Programmstrukturen in C

Grundlagen der Programmierung

6.2 Extras/Lesen aus Dateien

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

Grundlagen der Programmierung

Programmieren in C. Die C-Standardbibliothek: Datei Ein- und Ausgabe. Prof. Dr. Nikolaus Wulff

Datentypen printf und scanf. Programmieren in C Dr. Michael Zwick

Einführung in die Programmierung Arrays, Zeiger, Strings. Arvid Terzibaschian

Objektorientiertes Programmieren (Java)

Dateizugriff unter C

Annehmende Schleife do while

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

Programmiersprachen Einführung in C

Kompilieren Datentypen Operatoren. Überblick. 1 Kompilieren. 2 Datentypen. const static volatile. 3 Operatoren. Alexander Batoulis

C++ - Einführung in die Programmiersprache Ein- und Ausgabe in die Konsole. Leibniz Universität IT Services Anja Aue

Strings. Daten aus Dateien einlesen und in Dateien speichern.

Arrays, Zeiger und Funktionen (call by reference)

Zeichenketten (Strings)

Kapitel. Platzhalter. Was sind Platzhalter?

Programmiersprache C Teil 1

File I/O. Persistieren von Daten. Gastvorlesung Ralph Erdt erdt (bei) informatik.fh-wiesbaden.de

Eine Mini-Shell als Literate Program

Nachname:... Vorname:... MatrNr.:... Klausur PR2. int main() { char Text[] = "Sehr geehrte Damen und Herren!"; char *tmp=text;

Informatik Repetitorium SS Volker Jaedicke

Praktikum zur Vorlesung Einführung in die Programmierung WS 14/15 Blatt 3

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Lösungshinweise zum Übungsblatt 6: Programmieren in C (WS 2018/19)

Elementare Datentypen in C++

Die Programmiersprache C

System.out.println("TEXT");

printf("%c \n", 'd'); printf("%lx \n", 32L); printf("%o \n", 64); printf("%f \n", 1.0E-2); printf("%d \n", '\r'); printf("%f \n", 1.0/2.

BKTM - Programmieren leicht gemacht.

Transkript:

+ C - Formatierte Eingabe mit scanf() BKTM - Programmieren leicht gemacht. Formatierte Eingabe mit scanf() Um eine Eingabe von der Tastatur bereitzustellen, kann man die scanf()-funktion benutzen. Der scanf() steht in der Standardbibliothek stdio.h. Als erstes die Syntax der Funktion: int scanf(const char *format,...); Mit Hilfe der Funktion scanf() können unterschiedliche Werte (unterschiedlichen Datentypen) formatiert eingelesen werden. Dabei wird von dem Standardeingabe (stdin), normalerweise die Tastatur, eingelesen. Darüber hinaus liefert der scanf() die Zahl eingelesenen Zeichen als Rückgabewert zurück. Bei fehlerfreier Ausführung liefert die scanf()-funktion die Anzahl der Zeichen zurück, die erfolgreich gelesen, konvertiert und gespeichert wurden. Wenn die Eingabe von scanf() fehlerhaft ist, gibt scanf() eine 0 zurück. void main () { int zahl; printf("bitte geben Sie eine Zahl ein : "); // Ausgabe der Eingabeaufforderung scanf("%d",&zahl); // Eingabe durch den Benutzer nbsp; printf("die Zahl lautet %d.\n", zahl); // Ausgabe der Benutzereingabe Bildschirmausgabe für die Eingabe 100: Bitte geben Sie eine Zahl ein : 100 Die Zahl lautet 100. Der Aufbau von scanf() hat sehr viel Ähnlichkeit mit printf(). Scanf() ließt die Eingabe formatiert ein. Darum hat die Funktion in den runden Klammern einen Bereich, der durch zwei Anführungszeichen gebildet wird und die Formatspezifizierung (siehe auch Variablen/Konstanten / Datentypen) des einzulesenden Werts aufnimmt. Dahinter wird durch ein Komma getrennt die Variable angegeben, die die Eingabe aufnehmen soll. Der Unterschied zum printf() besteht darin, dass vor der Variablen der Adressoperator & (siehe Operatoren) steht, da der scanf() direkt auf den Arbeitsspeicherbereich zugreift. Achtung: Das Weglassen des Adressoperators & ist auch ein häufiger Fehler von Anfänger, der immer wieder zu Programmabstürzen führt.

Ein weiterer Fehler ist den scanf() wie den printf() zu benutzen. Das heißt folgender scanf() funktioniert nicht. scanf("bitte geben Sie eine Zahl ein: %d\n", &zahl); {mospagebreak title= * Probleme mit Scanf() und Lösungen Probleme mit dem scanf() und Lösungen Ein Problem des scanf() ist die Pufferung der Eingabe, das heißt die Eingabe durchläuft den Eingabepuffer. Wenn man jetzt eine Eingabe tätigt, besteht diese aus dem tatsächlichen Eingabewert und einem Return-Zeichen, um die Eingabe zu beenden. Der scanf() nimmt nun den Wert auf und übergibt diesen an die entsprechende Variable. Was im Tastaturpuffer verbleibt ist das Return-Zeichen. Der nächste scanf() mit der Formatspezifikation %c bzw. %s übernimmt dieses Zeichen und es sieht so aus, als ob der Befehl übersprungen wird. printf("eingabe 2. Buchstabe : "); printf("sie haben folgende Buchstaben eingegeben: %c %c",var1,var2); Bildschirmausgabe bei versuchter Eingabe von a und b: Eingabe 1. Buchstabe : a Eingabe 2. Buchstabe Sie haben folgende Buchstaben eingegeben: a Warum wird der zweite Buchstabe immer übersprungen und nicht ausgegeben? In diesem Beispiel wurde ja als erstes der Buchstabe "a" eingegeben und ENTER gedrückt. Dieses ENTER (ASCII-Code = 10 = \n = newline) befindet sich immer noch im Puffer der Standardeingabe und wird automatisch für das zweite Zeichen verwendet. Lösungen für dieses Problem 1. Möglichkeit: Sie benutzen eine Funktion namens fflush(). Diese Funktion entleert den Tastatur-puffer. (Funktioniert nicht auf jedem Betriebssystem (speziell nicht unter Linux))

fflush(stdin); printf("eingabe 2. Buchstabe : "); fflush(stdin); printf("sie haben folgende Buchstaben eingegeben : %c %c ",var1,var2); Bildschirmausgabe für die Eingaben a und b: Eingabe 1. Buchstabe: a Eingabe 2. Buchstabe: b Sie haben folgende Buchstaben eingegeben: a b 2. Möglichkeit: Mit Hilfe einer do while-schleife zieht man das Newline-Zeichen aus dem Puffer heraus. do {

while ( getchar()!= '\n' ); printf("eigabe 2. Buchstabe : "); do { while ( getchar()!= '\n' ); printf("%c %c\n",var1,var2); Bildschimausgabe für die Eingaben a und b: Eingabe 1. Buchstabe: a Eingabe 2. Buchstabe: b a b 3. Möglichkeit: Sie verwenden andere Funktionen für die Standardeingabe. Zum Beispiel fgets() und sscanf(). Ein weiteres Problem des scanf() ist die Eingabe von Zeichenketten mit Leerzeichen. scanf() beendet das einlesen nicht beim Return-Zeichen, sondern schon beim ersten Leerzeichen. Der Rest der Eingabe verbleibt im Puffer. char var1[20]; printf("eingabe einer Zeichenkette: "); scanf("%s",&var1); printf("ausgabe: %s\n",var1);

Bildschirmausgabe für die Eingabe "Hallo Welt": Eingabe einer Zeichenkette: Hallo Welt! Ausgabe: Hallo