Функции fprintf и fscanf

Язык Си
03.02.2017

(Всего голосов: 3)

Функции fscanf и fprintf очень удобно использовать для работы с файлами. Без них пришлось бы сначала переводить данные в массив, а уже потом проводить операции. Для работы необходима библиотека <stdio.h>. 

fscanf

Работа функции fscanf идентична scanf. Разница лишь в том, что scanf считывает данные с клавиатуры, а fscanf - из файла. fscanf(указатель на файл, тип считываемых данных, указатель на переменную)

fprintf

В отличие от printf, которая выводит информацию на консоль, fprintf вводит данные в текстовый файл. fprintf(указатель на файл, тип вводимых данных, вводимые данные).

В качестве примера представляю программу, которая находит среднее арифметическое чисел текстового файла и записывает его обратно, в тот же файл.

#include <cstdlib>
#include <stdio.h>  

int main(int argc, char** argv) {
    char file[] = "fileh.txt";                
    FILE *inf;
    inf = fopen(file, "r+");                   //открываем файл для чтения и записи
    if (!inf) {
        printf("File %s not found\n", file);   //в случае отсутствия файла
        return 1;
    }
    float sum = 0, sred, i, g = 0;
    while (!feof(inf)) {                       //feof означает, что файл закончился
        fscanf(inf, "%f", &i);                 //берем число из файла
        sum = sum + i;                         //считаем сумму чисел 
        g++;                                   //считаем количество чисел
    }
    sred = sum / g;
    printf("%f\n", sred);                      //полученное значение выводим на консоль
    fprintf(inf, "\n%f", sred);                //полученное значение вводим обратно в файл
    fclose(inf);                               //закрываем файл
    return 0;
}

Теперь создаем текстовый файл fileh.txt, заполняем его числами и запускаем программу. 

Числа в файле:

4 6
10
8

Результат на экране:

7.000000
Для закрытия терминала нажмите клавишу [ВВОД]...

Результат в файле:

4 6
10
8
7.000000

Особенности считывания:

fscanf cчитывает данные по порядку, при этом не читает пробелы. За один раз будет считано только одно слово, поэтомуfscanf необходимо заключать в цикл. Таким образом, считана будет вся информация от начала до конца. Считанные данные записываются в переменную, указанную правее типа считываемых данных.

Файл можно открывать для чтения (нужно указать "r"), для записи (нужно указать "w") и для чтения и записи (нужно указать "r+").

 


Оставить комментарий