scanf, wscanf
Nach oben zu stdio.h - Index
Header-Datei
stdio.h
Kategorie
Konsolen-Ein-/Ausgaberoutinen
Prototyp
int scanf(const char *format[, address, ...]);
int wscanf(const wchar_t *format[, address, ...]);
Beschreibung
Untersucht und formatiert Eingaben aus dem Stream stdin
.
Anmerkung: Für Win32- und Win64-GUI-Anwendungen muss
stdin
umgeleitet werden.
Die Funktion scanf
:
- Untersucht Zeichen für Zeichen eine Reihe von Eingabefeldern
- Formatiert jedes Feld entsprechend den Formatbezeichnern, die in dem Format-String
*format
angegeben sind. vsscanf
untersucht und formatiert mithilfe einer Argumentliste die Eingabe aus einem String
Für jedes Eingabefeld muss es einen Formatbezeichner und eine Adresse geben.
scanf
kann die Untersuchung eines bestimmten Feldes abbrechen, bevor das normale Feldendezeichen (Whitespace-Zeichen) erreicht ist, oder kann die gesamte Verarbeitung beenden. Einzelheiten über die möglichen Ursachen finden Sie unter Warum scanf die Untersuchung abbricht.
Anmerkung:
scanf
kann zu unerwarteten Ergebnissen führen, wenn Sie von dem erwarteten Muster abweichen. Sie müssenscanf
Informationen darüber liefern, wie sich diese Funktion am Ende einer Zeile synchronisieren kann.
Die Kombination von gets oder fgets gefolgt von sscanf ist einfach und sicher, und daher auch gegenüber scanf
vorzuziehen.
Rückgabewert
scanf
gibt die Anzahl erfolgreich untersuchter, konvertierter und gespeicherter Eingabefelder zurück. Die untersuchten Felder, die nicht gespeichert wurden, werden nicht gezählt.
Bei einem Fehler:
- Wurden keine Felder gespeichert, gibt scanf 0 zurück.
- Versucht scanf, über das Dateiende oder das Zeilenende hinaus zu lesen, wird EOF zurückgegeben.
Weitere Informationen zu scanf
Beispiel
#include <stdio.h> int main(void) { char label[20]; char name[20]; int entries = 0; int loop, age; double salary; struct Entry_struct { char name[20]; int age; float salary; } entry[20]; /* Eingabe eines Labels als String von maximal 20 Zeichen Länge anfordern */ printf("\n\nPlease enter a label for the chart: "); scanf("%20s", label); fflush(stdin); /* Für den Fall einer ungültigen Eingabe Stream-Puffer leeren */ /* Anzahl der Einträge als Integer eingeben */ printf("How many entries will there be? (less than 20) "); scanf("%d", &entries); fflush(stdin); /* Für den Fall einer ungültigen Eingabe Stream-Puffer leeren */ /* Einen nur aus Buchstaben bestehenden Namen eingeben */ for (loop=0;loop<entries;++loop) { printf("Entry %d\n", loop); printf(" Name : "); scanf("%[A-Za-z]", entry[loop].name); fflush(stdin); /* Für den Fall einer ungültigen Eingabe Stream-Puffer leeren */ /* Alter als ein Integer eingeben */ printf(" Age : "); scanf("%d", &entry[loop].age); fflush(stdin); /* Für den Fall einer ungültigen Eingabe Stream-Puffer leeren */ /* Gehalt als Gleitkommazahl eingeben */ printf(" Salary : "); scanf("%f", &entry[loop].salary); fflush(stdin); /* Für den Fall einer ungültigen Eingabe Stream-Puffer leeren */ } /* Name, Age und Gehalt als String-, Integer- and double-Werte eingeben */ printf("\nPlease enter your name, age and salary\n"); scanf("%20s %d %lf", name, &age, &salary); /* Die eingegebenen Daten anzeigen */ printf("\n\nTable %s\n",label); printf("Compiled by %s age %d $%15.2lf\n", name, age, salary); printf("-----------------------------------------------------\n"); for (loop=0;loop<entries;++loop) printf("%4d | %-20s | %5d | %15.2lf\n", loop + 1, entry[loop].name, entry[loop].age, entry[loop].salary); printf("-----------------------------------------------------\n"); return 0; }
Siehe auch
- scanf-Formatbezeichner
- Der scanf-Format-String
- Eingabefelder für scanf-Funktionen
- Wenn ...scanf die Untersuchung abbricht
- Konventionen für Formatbezeichner
- Formatbezeichner in C/C++
- Formatierte Eingabe/Ausgabe mit erweiterten Typen
- Unicode-Formatbezeichner für die Eingabe
- Argumentunterdrückung
- Modifizierer für Zeigergröße und Argumenttyp
- gets, _getws
- fgets, fgetws