scanf(3) Library Functions Manual scanf(3) BEZEICHNUNG scanf, fscanf, vscanf, vfscanf - Anpassung des Datei-Eingabeformats BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int scanf(const char *restrict format, ); int fscanf(FILE *restrict datenstrom, const char *restrict format, ); #include int vscanf(const char *restrict format, va_list ap); int vfscanf(FILE *restrict datenstrom, const char *restrict format, va_list ap); Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)): vscanf(), vfscanf(): _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L BESCHREIBUNG Die Funktionenfamilie scanf() pruft formatierte Eingaben wie sscanf(3), liest aber aus einer DATEI. Die korrekte Verwendung dieser Funktionen ist sehr schwierig und es wird empfohlen, mit fgets(3) oder getline(3) ganze Zeilen zu lesen und sie spater mit sscanf(3) oder noch spezialisierteren Funktionen wie strtol(3) auszuwerten. Die Funktion scanf() liest Eingaben von der Standardeingabe stdin, fscanf liest Eingaben von dem Datenstrom-Zeiger datenstrom. Die Funktion vfscanf() verhalt sich analog zu vfprintf(3) und liest Eingaben von dem Datenstrom-Zeiger datenstrom, wobei eine variable Argumentliste von Zeigern benutzt wird (siehe stdarg(3)). Die Funktion vscanf() ist zu vprintf(3) analog und liest aus der Standardeingabe. RUCKGABEWERT Bei Erfolg geben diese Funktionen die Anzahl der Eingabeelemente zuruck, die erfolgreich ubereinstimmten und zugewiesen wurden. Dies konnen weniger sein, als bereitgestellt wurden oder null, wenn ein >>matching failure<< auftrat. Der Wert EOF wird zuruckgegeben, wenn das Ende der Eingabe erreicht wird, bevor entweder die erste erfolgreiche Umwandlung oder ein >>matching failure<< auftrat. EOF wird auch zuruckgegeben, wenn ein Lesefehler auftritt. In diesem Fall wird die Fehleranzeige fur den Datenstrom gesetzt (siehe ferror(3)) und errno so gesetzt, dass es den Fehler angibt. FEHLER EAGAIN Der Dateideskriptor, der datenstrom zugrundeliegt, ist als nicht blockierend gekennzeichnet und die Leseaktion wurde blockieren. EBADF Der Dateideskriptor, der datenstrom zugrundeliegt, ist ungultig oder nicht zum Lesen geoffnet. EILSEQ Eingabebyte-Abfolge bildet kein gultiges Zeichen. EINTR Die Leseaktion wurde durch ein Signal unterbrochen; siehe signal(7). EINVAL Nicht genug Argumente oder format ist NULL. ENOMEM Speicher aufgebraucht. ATTRIBUTE Siehe attributes(7) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +-------------------------+-------------------------+------------------+ |Schnittstelle | Attribut | Wert | +-------------------------+-------------------------+------------------+ |scanf(), fscanf(), | Multithread-Fahigkeit | MT-Sicher locale | |vscanf(), vfscanf() | | | +-------------------------+-------------------------+------------------+ STANDARDS C11, POSIX.1-2008. GESCHICHTE C99, POSIX.1-2001. WARNUNGEN Diese Funktionen erschweren es, Zeilenumbruche von anderen Leerraumzeichen zu unterscheiden. Dies ist insbesondere fur zeilengepufferte Eingabe, wie beim Standardeingabe-Datenstrom, problematisch. Diese Funktionen konnen keine Fehler nach der letzten, nicht unterdruckten Umwandlungsfestlegung berichten. FEHLER Es ist unmoglich, genau zu bestimmen, wie viele Zeichen diese Funktionen aus dem Eingabedatenstrom verbraucht haben, da sie nur die Anzahl der erfolgreichen Umwandlungen berichten. Falls beispielsweise die Eingabe >>123\n a<< ist, wird scanf("%d %d", &a, &b) die Ziffern, den Zeilenumbruch und das Leerzeichen, aber nicht den Buchstaben a verbrauchen. Dies erschwert es, sich von ungultiger Eingabe zu erholen. SIEHE AUCH fgets(3), getline(3), sscanf(3) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Patrick Rother , Chris Leick und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 9. Dezember 2023 scanf(3)