Funkcja vfprintf () w C ++ służy do zapisywania sformatowanego ciągu znaków w strumieniu pliku.
vfprintf () prototyp
int vfprintf (PLIK * strumień, format const char *, va_list vlist);
vfprintf()
Funkcja zapisuje łańcuch wskazywany przez format strumienia do strumienia pliku. Format ciągu może zawierać specyfikatory formatu zaczynające się od%, które są zastępowane wartościami zmiennych, które są przekazywane jako lista vlist.
Jest zdefiniowany w pliku nagłówkowym.
Parametry vfprintf ()
- stream: strumień pliku wyjściowego do zapisania wyniku.
- format: wskaźnik do łańcucha zakończonego znakiem null, który jest zapisywany w strumieniu pliku. Składa się ze znaków wraz z opcjonalnymi specyfikatorami formatu zaczynającymi się od%.
Specyfikatory formatu są zastępowane wartościami odpowiednich zmiennych występujących po ciągu formatu.
Specyfikator formatu składa się z następujących części:
- Wiodący znak%
- Flagi: opcjonalnie jedna lub więcej flag, które modyfikują zachowanie konwersji.
- -: Wyrównaj wynik do lewej w polu. Domyślnie jest wyjustowany do prawej.
- +: Znak wyniku jest dołączany na początku wartości, nawet w przypadku wyników dodatnich.
- Spacja: jeśli nie ma znaku, na początku wyniku jest umieszczana spacja.
- #: Wykonywana jest alternatywna forma konwersji.
- 0: jest używany do liczb całkowitych i zmiennoprzecinkowych. Zera wiodące służą do wypełniania liczb zamiast spacji.
- Szerokość: opcjonalna * lub wartość całkowita używana do określenia pola o minimalnej szerokości.
- Precyzja: opcjonalne pole składające się z. po którym następuje * lub liczba całkowita lub nic, aby określić dokładność.
- Długość: opcjonalny modyfikator długości, który określa rozmiar argumentu.
- Specifier: specyfikator formatu konwersji. Dostępne specyfikatory formatu są następujące:
Specyfikator formatu Opis % Drukuje% do Zapisuje pojedynczy znak s Zapisuje ciąg znaków d lub i Konwertuje liczbę całkowitą ze znakiem na reprezentację dziesiętną o Konwertuje liczbę całkowitą bez znaku na reprezentację ósemkową X lub x Konwertuje liczbę całkowitą bez znaku na reprezentację szesnastkową u Konwertuje liczbę całkowitą bez znaku na reprezentację dziesiętną F lub f Konwertuje liczbę zmiennoprzecinkową na reprezentację dziesiętną E lub e Konwertuje liczbę zmiennoprzecinkową na dziesiętną notację wykładniczą A lub a Konwertuje liczbę zmiennoprzecinkową na wykładnik szesnastkowy G lub g Konwertuje liczbę zmiennoprzecinkową na dziesiętną lub dziesiętną notację wykładniczą n Zwraca liczbę znaków zapisanych do tej pory przez to wywołanie funkcji. Wynik jest zapisywany do wartości wskazywanej przez argument p Zapisuje sekwencję znaków zdefiniowaną w implementacji definiującą wskaźnik. Zatem ogólny format specyfikatora formatu to:
%(flags)(width)(.precision)(length)specifier
- vlist: lista argumentów zawierających dane do zapisania.
vfprintf () Wartość zwracana
Jeśli się powiedzie, vfprintf()
funkcja zwraca liczbę zapisanych znaków. W przypadku niepowodzenia zwraca wartość ujemną.
Przykład: Jak działa funkcja vfprintf ()
#include #include void write(FILE* fp, const char *fmt,… ) ( va_list args; va_start(args, fmt); vfprintf(fp, fmt, args); va_end(args); ) int main () ( FILE *fp = fopen("data.csv","w"); char name(5)(50) = ("John","Harry","Kim","Yuan","Laxmi"); int age(5) = (13,41,26,21,32); write(fp, "%s,%s", "name", "age"); for (int i=0; i<5; i++) write(fp, "%s,%d", name(i), age(i)); return 0; )
Po uruchomieniu programu do pliku data.csv zostaną zapisane następujące dane:
imię, wiek John, 13 Harry, 41 Kim, 26 Yuan, 21 Laxmi, 32