C ++ vfwscanf () - C ++ standaardbibliotheek

De functie vfwscanf () in C ++ wordt gebruikt om een ​​brede tekenreeks uit een bestandsstroom te lezen.

De functie vfwscanf () is gedefinieerd in het headerbestand.

vfwscanf () prototype

 int vfwscanf (FILE * stream, const wchar_t * format, va_list vlist);

De functie vfwscanf () leest de gegevens uit de bestandsstroomstroom en slaat de waarden op de respectieve locaties op zoals gedefinieerd door vlist.

vfwscanf () Parameters

  • stream: invoer bestandsstream om de gegevens van te lezen.
  • format: Pointer naar een brede tekenreeks met een null-einde die aangeeft hoe de invoer moet worden gelezen. Het bestaat uit formaatspecificaties die beginnen met%.
    De format string heeft de volgende onderdelen:
    • Niet-witruimte-tekens behalve%, die elk één identiek teken uit de invoerstroom verbruiken. Het kan ervoor zorgen dat de functie mislukt als het volgende personage in de stream niet gelijk is.
    • Witruimteteken: Alle opeenvolgende witruimtetekens worden behandeld als een enkel witruimteteken. Verder worden ' n', ' t' en '' als hetzelfde beschouwd.
    • Conversiespecificatie: het volgt het volgende formaat:
      • Initieel% -teken dat het begin aangeeft
      • Een optioneel * genaamd toewijzingsonderdrukkend teken. Als dit teken aanwezig is, wijst vfwscanf () het resultaat niet toe aan een ontvangend argument.
      • Een optioneel positief geheel getal dat de maximale veldbreedte aangeeft. Het specificeert het maximale aantal tekens dat vfwscanf () mag gebruiken bij het uitvoeren van de conversie die is gespecificeerd door de huidige conversiespecificatie.
      • Een optionele lengtemodificator die de grootte van het ontvangende argument specificeert.
      • Een specificatie voor het conversieformaat.
    Formaatspecificaties
    Formaatspecificatie Omschrijving
    % Komt overeen met de letterlijke%
    c Komt overeen met een enkel teken of meerdere tekens. Als breedte is gedefinieerd, komt overeen met exact breedtetekens.
    s Komt overeen met opeenvolgende niet-witruimte-tekens. Als breedte is gedefinieerd, komt overeen met exact breedtetekens of totdat de eerste witruimte is gevonden.
    (set) Komt overeen met een niet-lege tekenreeks uit de opgegeven reeks tekens. Als aanwezig is aan het begin van de set, komen alle karakters die niet in de set zitten overeen.
    d Komt overeen met een decimaal geheel getal.
    ik Komt overeen met een geheel getal.
    O Komt overeen met een octaal geheel getal zonder teken.
    X of x Komt overeen met een niet-ondertekend hexadecimaal geheel getal.
    u Komt overeen met een decimaal geheel getal zonder teken.
    A of a, E of e, F of f, G of g Komt overeen met een getal met drijvende komma.
    n Retourneert het aantal tot dusver gelezen tekens.
    p Komt overeen met een door de implementatie gedefinieerde tekenreeks die een pointer definieert.

    Dus het algemene formaat van de formaatspecificatie is:
     % (*) (breedte) (lengte) specificatie
  • vlist: een lijst met argumenten voor het ontvangen van de invoer.

vfwscanf () Retourwaarde

  • Als dit lukt, geeft de functie vfwscanf () het aantal succesvol gelezen argumenten terug.
  • Bij een storing wordt EOF geretourneerd.

Voorbeeld: hoe werkt de functie 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; )

Wanneer u het programma uitvoert, is een mogelijke uitvoer:

 क - Ka ख - Kha ग - Ga घ - Gha ङ - Nga

Interessante artikelen...