fprintf() Funzione in C

fprintf() Funzione in C

Inserimento e output di file formattati #

Fino a questo punto abbiamo visto come leggere e scrivere caratteri e stringhe da e verso il file. Nel mondo reale, i dati sono costituiti da molti tipi diversi. In questo capitolo impareremo come inserire e produrre dati di diversi tipi in modo formattato. Usiamo input e output formattati quando vogliamo leggere o scrivere dati in un formato particolare.

funzione fprintf() #

Sintassi: int fprintf(FILE *fp, const char *format [, argument, ...] );

Il fprintf() la funzione è la stessa di printf() ma invece di scrivere i dati sulla console, scrive i dati formattati nel file. Quasi tutti gli argomenti di fprintf() la funzione è la stessa di printf() funzione tranne per il fatto che ha un argomento aggiuntivo che è un puntatore di file al file in cui verrà scritto l'output formattato. In caso di successo, restituisce il numero totale di caratteri scritti nel file. In caso di errore, restituisce EOF .

Il seguente programma mostra come usare fprintf() funzione.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include<stdio.h>
#include<stdlib.h>

int main()
{
    FILE *fp;
    char name[50];
    int roll_no, chars, i, n;
    float marks;

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

    if(fp == NULL)
    {
        printf("Error opening file\n");
        exit(1);
    }

    printf("Testing fprintf() function: \n\n");

    printf("Enter the number of records you want to enter: ");
    scanf("%d", &n);

    for(i = 0; i < n; i++)
    {
        fflush(stdin);
        printf("\nEnter the details of student %d \n\n", i +1);

        printf("Enter name of the student: ");
        gets(name);

        printf("Enter roll no: ");
        scanf("%d", &roll_no);

        printf("Enter marks: ");
        scanf("%f", &marks);

        chars = fprintf(fp, "Name: %s\t\tRoll no: %d\t\tMarks: %.2f\n",
            name, roll_no, marks);
       printf("\n%d characters successfully written to the file\n\n", chars);
    }

    fclose(fp);
    return 0;
}

Risultato previsto:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Testing fprintf() function:

Enter the number of records you want to enter: 5

Enter the details of student 1

Enter name of the student: Tina
Enter roll no: 1
Enter marks: 45

37 characters successfully written to the file

Enter the details of student 2

Enter name of the student: Nina
Enter roll no: 5
Enter marks: 89

37 characters successfully written to the file

Enter the details of student 3

Enter name of the student: Tim
Enter roll no: 2
Enter marks: 49

36 characters successfully written to the file

Enter the details of student 4

Enter name of the student: Jim
Enter roll no: 8
Enter marks: 41

36 characters successfully written to the file

Enter the details of student 5

Enter name of the student: King
Enter roll no: 9
Enter marks: 59

37 characters successfully written to the file

Come funziona:

Nella riga 6, viene dichiarata una variabile di puntatore di struttura fp di tipo struct FILE.

Nella riga 7, viene dichiarato un array di caratteri di dimensione 50.

Nella riga 8, vengono dichiarate quattro variabili, ovvero roll_no, chars, i e n di tipo int.

Nella riga 9 viene dichiarata una variabile mark di tipo float.

Nella riga 11, la funzione fopen() viene chiamata con due argomenti, ovvero "records.txt" e "w". In caso di successo, restituisce un puntatore al file records.txt e apre il file records.txt in modalità di sola scrittura. In caso di errore, restituisce NULL.

Nella riga 13-17, l'istruzione if viene utilizzata per verificare il valore di fp. Se è NULL, l'istruzione printf() stampa il messaggio di errore e il programma viene terminato. Altrimenti, il programma continua con l'istruzione che segue l'istruzione if.

Nella riga 19, un'istruzione printf() stampa sulla console "Testing fprintf() function:\n\n".

Nella riga 21-22, il programma chiede all'utente di inserire il numero di studenti di cui desidera inserire i record.

Nelle righe 24-41, un ciclo for chiede all'utente di inserire tre informazioni nome, roll_no e voti dei rispettivi studenti. Nella riga 26, stiamo svuotando (rimuovendo) il contenuto dello standard input, questa riga è necessaria altrimenti la funzione gets() nella riga 30 leggerà il carattere di nuova riga (inserito chiedendo il numero di studenti) e non aspetterà l'utente per inserire il nome dello studente.

Nella riga 38, viene chiamata la funzione fprintf() insieme a 5 argomenti per scrivere dati formattati nel file. Se i dati sono stati scritti correttamente nel file, restituisce il numero di caratteri scritti nel file, che viene quindi assegnato alla variabile chars. Nella riga 40, un'istruzione printf() stampa il numero totale di caratteri scritti nel file dalla precedente chiamata della funzione fprintf(). Il ciclo continuerà a richiedere più record di studenti fino a quando i

Nella riga 43, la funzione fclose() chiude il file.