Funzione libreria C - vfprintf ()

Descrizione

La funzione di libreria C. int vfprintf(FILE *stream, const char *format, va_list arg) invia l'output formattato a un flusso utilizzando un elenco di argomenti passato ad esso.

Dichiarazione

Di seguito è riportata la dichiarazione per la funzione vfprintf ().

int vfprintf(FILE *stream, const char *format, va_list arg)

Parametri

  • stream - Questo è il puntatore a un oggetto FILE che identifica il flusso.

  • format- Questa è la stringa C che contiene il testo da scrivere nello stream. Opzionalmente può contenere tag di formato incorporati che vengono sostituiti dai valori specificati negli argomenti aggiuntivi successivi e formattati come richiesto. Prototipo di tag di formato:%[flags][width][.precision][length]specifier, come spiegato di seguito -

Sr.No. Specifier e output
1

c

Personaggio

2

d or i

Numero intero decimale con segno

3

e

Notazione scientifica (mantissa / esponente) utilizzando il carattere e

4

E

Notazione scientifica (mantissa / esponente) utilizzando il carattere E

5

f

Virgola mobile decimale

6

g

Utilizza il più breve tra% e o% f

7

G

Utilizza il più breve tra% E o% f

8

o

Firmato ottale

9

s

Stringa di caratteri

10

u

Numero intero decimale senza segno

11

x

Intero esadecimale senza segno

12

X

Intero esadecimale senza segno (lettere maiuscole)

13

p

Indirizzo del puntatore

14

n

Niente stampato

15

%

Personaggio

Sr.No. Bandiere e descrizione
1

-

Giustifica a sinistra entro la larghezza del campo data; La giustificazione a destra è l'impostazione predefinita (vedere il specificatore secondario della larghezza).

2

+

Forza a far precedere il risultato con un segno più o meno (+ o -) anche per i numeri positivi. Per impostazione predefinita, solo i numeri negativi sono preceduti dal segno -ve.

3

(space)

Se non verrà scritto alcun segno, viene inserito uno spazio vuoto prima del valore.

4

#

Utilizzato con gli specificatori o, x o X, il valore è preceduto rispettivamente da 0, 0x o 0X per valori diversi da zero. Utilizzato con e, E ed f, forza l'output scritto a contenere un punto decimale anche se non segue alcuna cifra. Per impostazione predefinita, se non seguono cifre, non viene scritto alcun punto decimale. Usato con g o G, il risultato è lo stesso di e o E ma gli zeri finali non vengono rimossi.

5

0

Inserisce a sinistra il numero con zero (0) invece di spazi, dove è specificato il riempimento (vedere il sotto-specificatore di larghezza).

Sr.No. Larghezza e descrizione
1

(number)

Numero minimo di caratteri da stampare. Se il valore da stampare è inferiore a questo numero, il risultato viene riempito con spazi vuoti. Il valore non viene troncato anche se il risultato è maggiore.

2

*

La larghezza non è specificata nella stringa di formato, ma come argomento di un valore intero aggiuntivo che precede l'argomento che deve essere formattato.

Sr.No. .precisione e descrizione
1

.number

Per gli specificatori di numeri interi (d, i, o, u, x, X) - la precisione specifica il numero minimo di cifre da scrivere. Se il valore da scrivere è inferiore a questo numero, il risultato viene riempito con zeri iniziali. Il valore non viene troncato anche se il risultato è più lungo. Una precisione pari a 0 significa che non viene scritto alcun carattere per il valore 0. Per gli specificatori e, E ed f - questo è il numero di cifre da stampare dopo il punto decimale. Per gli specificatori ge G - Questo è il numero massimo di cifre significative da stampare. Per s - questo è il numero massimo di caratteri da stampare. Per impostazione predefinita, tutti i caratteri vengono stampati finché non viene incontrato il carattere nullo finale. Per il tipo c - non ha effetto. Quando non viene specificata alcuna precisione, il valore predefinito è 1. Se il periodo viene specificato senza un valore esplicito per la precisione, viene utilizzato 0.

2

.*

La precisione non è specificata nella stringa di formato, ma come argomento di un valore intero aggiuntivo che precede l'argomento che deve essere formattato.

Sr.No. Lunghezza e descrizione
1

h

L'argomento viene interpretato come int breve o int breve senza segno (si applica solo a specificatori interi: i, d, o, u, x e X).

2

l

L'argomento viene interpretato come un int lungo o un int lungo senza segno per gli specificatori interi (i, d, o, u, x e X) e come un carattere o una stringa di caratteri estesi per gli specificatori c e s.

3

L

L'argomento viene interpretato come un doppio lungo (si applica solo agli specificatori in virgola mobile - e, E, f, ge G).

  • arg- Un oggetto che rappresenta l'elenco degli argomenti delle variabili. Questo dovrebbe essere inizializzato dalla macro va_start definita in <stdarg>.

Valore di ritorno

In caso di esito positivo, viene restituito il numero totale di caratteri scritti altrimenti viene restituito un numero negativo.

Esempio

Il seguente esempio mostra l'utilizzo della funzione vfprintf ().

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

void WriteFrmtd(FILE *stream, char *format, ...) {
   va_list args;

   va_start(args, format);
   vfprintf(stream, format, args);
   va_end(args);
}

int main () {
   FILE *fp;

   fp = fopen("file.txt","w");

   WriteFrmtd(fp, "This is just one argument %d \n", 10);

   fclose(fp);
   
   return(0);
}

Compiliamo ed eseguiamo il programma sopra che aprirà un file file.txt per scrivere nella directory corrente e scriverà il seguente contenuto:

This is just one argument 10

Vediamo ora il contenuto del file sopra utilizzando il seguente programma:

#include <stdio.h>

int main () {
   FILE *fp;
   int c;

   fp = fopen("file.txt","r");
   while(1) {
      c = fgetc(fp);
      if( feof(fp) ) {
         break;
      }
      printf("%c", c);
   }
   fclose(fp);
   return(0);
}

Compiliamo ed eseguiamo il programma sopra per produrre il seguente risultato.

This is just one argument 10