Udostępnij za pośrednictwem


vscanf, vwscanf

Odczytuje sformatowane dane ze standardowego strumienia wejściowego. Dostępne są bezpieczniejsze wersje tych funkcji; zobacz vscanf_s, vwscanf_s.

Składnia

int vscanf(
   const char *format,
   va_list arglist
);
int vwscanf(
   const wchar_t *format,
   va_list arglist
);

Parametry

format
Formatuj ciąg sterujący.

arglist
Lista argumentów zmiennej.

Wartość zwracana

Zwraca liczbę pól, które zostały pomyślnie przekonwertowane i przypisane; wartość zwracana nie zawiera pól, które zostały odczytane, ale nie zostały przypisane. Wartość zwracana 0 wskazuje, że żadne pola nie zostały przypisane.

Jeśli format jest wskaźnikiem NULL , wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonanie jest dozwolone do kontynuowania, te funkcje zwracają EOF i ustawiają wartość errnoEINVAL.

Aby uzyskać informacje o tych i innych kodach błędów, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Uwagi

Funkcja vscanf odczytuje dane ze standardowego strumienia stdin wejściowego i zapisuje dane w lokalizacjach, które są podane przez arglist listę argumentów. Każdy argument na liście musi być wskaźnikiem do zmiennej typu odpowiadającej specyfikatorowi typu w programie format. Jeśli kopiowanie odbywa się między nakładającymi się ciągami, zachowanie jest niezdefiniowane.

Ważne

Podczas odczytywania vscanf ciągu należy zawsze określić szerokość formatu %s (na przykład "%32s" zamiast "%s"), w przeciwnym razie niepoprawnie sformatowane dane wejściowe mogą spowodować przepełnienie buforu. Alternatywnie możesz użyć polecenia vscanf_s, vwscanf_s lub fgets.

vwscanf jest wersją szerokoznakową ; vscanfargument to formatvwscanf ciąg o szerokim znaku. vwscanf i vscanf zachowuje się identycznie, jeśli strumień jest otwarty w trybie ANSI. vscanf nie obsługuje danych wejściowych ze strumienia UNICODE.

Mapowania procedur tekstu ogólnego

Procedura TCHAR.H _UNICODE i _MBCS niezdefiniowane _MBCS Zdefiniowane _UNICODE Zdefiniowane
_vtscanf vscanf vscanf vwscanf

Aby uzyskać więcej informacji, zobacz Pola specyfikacji formatu: scanf i wscanf funkcje.

Wymagania

Procedura Wymagany nagłówek
vscanf <stdio.h>
vwscanf <stdio.h> lub <wchar.h>

Konsola nie jest obsługiwana w aplikacjach platformy platforma uniwersalna systemu Windows (UWP). Standardowe dojścia strumienia skojarzone z konsolą programu stdin, stdouti i stderrmuszą zostać przekierowane, zanim funkcje czasu wykonywania języka C będą mogły ich używać w aplikacjach platformy UWP. Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// crt_vscanf.c
// compile with: /W3
// This program uses the vscanf and vwscanf functions
// to read formatted input.

#include <stdio.h>
#include <stdarg.h>

int call_vscanf(char *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vscanf(format, arglist);
    va_end(arglist);
    return result;
}

int call_vwscanf(wchar_t *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vwscanf(format, arglist);
    va_end(arglist);
    return result;
}

int main( void )
{
    int   i, result;
    float fp;
    char  c, s[81];
    wchar_t wc, ws[81];
    result = call_vscanf( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, ws );
    printf( "The number of fields input is %d\n", result );
    printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);
    result = call_vwscanf( L"%d %f %hc %lc %80S %80ls", &i, &fp, &c, &wc, s, ws );
    wprintf( L"The number of fields input is %d\n", result );
    wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}

      71 98.6 h z Byte characters
36 92.3 y n Wide charactersThe number of fields input is 6
The contents are: 71 98.599998 h z Byte characters
The number of fields input is 6
The contents are: 36 92.300003 y n Wide characters

Zobacz też

Obsługa obliczeń matematycznych i zmiennoprzecinkowych
We/Wy strumienia
ustawienia regionalne
fscanf, _fscanf_l, fwscanf, _fwscanf_l
printf, _printf_l, wprintf, _wprintf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
sscanf, _sscanf_l, swscanf, _swscanf_l
vscanf_s, vwscanf_s