Funkcia vfwscanf () v C ++ sa používa na čítanie reťazca so širokými znakmi z toku súborov.
Funkcia vfwscanf () je definovaná v hlavičkovom súbore.
prototyp vfwscanf ()
int vfwscanf (FILE * stream, const wchar_t * formát, va_list vlist);
Funkcia vfwscanf () načíta údaje z toku toku súborov a uloží hodnoty do príslušných umiestnení, ktoré definuje vlist.
vfwscanf () parametre
- stream: Vstupný tok súborov, z ktorého sa majú načítať údaje.
- formát: Ukazovateľ na prázdny znakový reťazec zakončený nulou, ktorý určuje, ako sa má čítať vstup. Skladá sa zo špecifikátorov formátu začínajúcich na%.
Reťazec formátu má nasledujúce časti:- Znaky bez medzier okrem%, pričom každý z nich spotrebuje jeden identický znak zo vstupného toku. Môže to spôsobiť zlyhanie funkcie, ak sa nasledujúci znak v streame neporovnáva rovnako.
- Znak medzery: Všetky nasledujúce znaky medzery sa považujú za jeden znak medzery. Ďalej sa ' n', ' t' a '' považujú za rovnaké.
- Špecifikácia prevodu: Má nasledujúci formát:
- Počiatočný znak%, ktorý určuje začiatok
- Voliteľný * znak, ktorý sa nazýva znak potlačujúci priradenie. Ak je tento znak prítomný, vfwscanf () nepriradí výsledok žiadnemu prijímaciemu argumentu.
- Voliteľné kladné celé číslo, ktoré určuje maximálnu šírku poľa. Určuje maximálny počet znakov, ktoré je vfwscanf () povolené spotrebovať pri uskutočňovaní prevodu špecifikovaného v aktuálnej špecifikácii prevodu.
- Voliteľný modifikátor dĺžky určujúci veľkosť prijímacieho argumentu.
- Špecifikátor formátu prevodu.
Špecifikátor formátu Popis % Zhoduje sa s literálnym% c Zhoduje sa s jedným alebo viacerými znakmi. Ak je definovaná šírka, zhoduje sa presne so znakmi šírky. s Zhoda po sebe idúcich znakov bez medzier. Ak je definovaná šírka, zhoduje sa presne so znakmi šírky alebo kým sa nenájde prvý medzera. (sada) Zhoduje sa s neprázdnou sekvenciou znakov z danej sady znakov. Pokiaľ je na začiatku množiny, potom sa všetky znaky, ktoré nie sú v množine, zhodujú. d Zhoduje sa s desatinným celým číslom. i Zhoduje sa s celým číslom. o Zhoduje sa s nepodpísaným osmičkovým celým číslom. X alebo x Zhoduje sa s hexadecimálnym celým číslom bez znamienka. u Zhoduje sa s desatinným celým číslom bez znamienka. A alebo a, E alebo e, F alebo f, G alebo g Zhoduje sa s plávajúcou desatinnou čiarkou. n Vráti počet doteraz prečítaných znakov. p Zhoduje sa s postupnosťou znakov definovaných implementáciou, ktorá definuje ukazovateľ.
Všeobecný formát špecifikátora formátu je teda:špecifikátor% (*) (šírka) (dĺžka)
- vlist: Zoznam argumentov pre príjem vstupov.
vfwscanf () Vrátená hodnota
- Ak je úspešná, funkcia vfwscanf () vráti počet úspešne prečítaných argumentov.
- Pri zlyhaní sa vráti EOF.
Príklad: Ako funguje funkcia 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; )
Po spustení programu bude možný výstup:
क - Ka ख - Kha ग - Ga घ - Gha ङ - Nga