Funkce vfwscanf () v C ++ se používá ke čtení širokopásmového řetězce ze streamu souboru.
Funkce vfwscanf () je definována v hlavičkovém souboru.
prototyp vfwscanf ()
int vfwscanf (FILE * stream, formát const wchar_t *, va_list vlist);
Funkce vfwscanf () čte data ze streamu proudu souborů a ukládá hodnoty do příslušných umístění definovaných vlist.
Parametry vfwscanf ()
- stream: Vstupní datový proud souboru, ze kterého se mají číst data.
- format: Ukazatel na řetězec znaků s nulovým zakončením, který určuje, jak číst vstup. Skládá se ze specifikátorů formátu počínaje%.
Řetězec formátu má následující části:- Znaky bez mezer s výjimkou%, z nichž každý spotřebuje jeden stejný znak ze vstupního proudu. Může způsobit selhání funkce, pokud další znak v proudu neporovnává stejné.
- Znak mezery: Všechny následující znaky mezery jsou považovány za jeden znak mezery. Dále jsou ' n', ' t' a '' považována za stejná.
- Specifikace převodu: Má následující formát:
- Počáteční znak%, který určuje začátek
- Volitelný * zvaný znak potlačující přiřazení. Pokud je tento znak přítomen, vfwscanf () nepřiřadí výsledek žádnému přijímajícímu argumentu.
- Volitelné kladné celé číslo, které určuje maximální šířku pole. Určuje maximální počet znaků, které je vfwscanf () povoleno spotřebovat při provádění převodu určeného aktuální specifikací převodu.
- Volitelný modifikátor délky určující velikost přijímajícího argumentu.
- Specifikátor formátu převodu.
Specifikátor formátu Popis % Odpovídá doslovnému% C Shoduje se s jedním nebo více znaky. Pokud je definována šířka, odpovídá přesně šířkovým znakům. s Porovnává po sobě jdoucí znaky bez mezer. Pokud je definována šířka, odpovídá přesně šířkovým znakům nebo dokud není nalezen první prázdný znak. (soubor) Odpovídá neprázdné posloupnosti znaků z dané sady znaků. Pokud je na začátku množiny, pak jsou všechny znaky, které nejsou v množině, porovnány. d Odpovídá desítkovému číslu. i Odpovídá celému číslu. Ó Odpovídá osmičkové celé číslo bez znaménka. X nebo x Porovná hexadecimální celé číslo bez znaménka. u Odpovídá desetinnému číslu bez znaménka. A nebo a, E nebo e, F nebo f, G nebo g Odpovídá číslu s plovoucí desetinnou čárkou. n Vrátí počet dosud přečtených znaků. p Odpovídá posloupnosti znaků definované implementací definující ukazatel.
Obecný formát specifikátoru formátu je tedy:Specifikátor% (*) (width) (length)
- vlist: Seznam argumentů pro příjem vstupů.
vfwscanf () Vrátí hodnotu
- Pokud bude úspěšná, vrátí funkce vfwscanf () počet úspěšně přečtených argumentů.
- Při selhání se vrátí EOF.
Příklad: Jak funguje funkce vfwscanf ()?
#include #include #include #include void read( FILE *fp, const wchar_t* format,… ) ( va_list args; va_start (args, format); vfwscanf (fp, format, args); va_end (args); ) int main () ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t symbol() = L"u0915u0916u0917u0918u0919"; wchar_t names(5)(5) = (L"Ka", L"Kha", L"Ga", L"Gha", L"Nga"); FILE *fp = fopen("example.txt","w+"); for (int i=0; i<5; i++) fwprintf(fp, L"%lc %ls ", symbol(i), names(i)); rewind(fp); wchar_t ch, str(5); for (int i=0; i<5; i++) ( read(fp, L"%lc %ls ", &ch, str); wprintf(L"%lc - %ls", ch, str); ) fclose(fp); return 0; )
Při spuštění programu bude možný výstup:
क - Ka ख - Kha ग - Ga घ - Gha ङ - Nga