C установка IDE C структура програми C змінні C типи даних С функція printf C константи C арифметичні операції C операції порівняння і логічні операції C порозрядні операції C операції присвоювання C перетворення типів C умовні конструкції C цикли С масиви і рядки С функція scanf C препроцесор. Директива #include C #define директива C макроси C умовна компіляція C функції. Визначення та опис функцій C функції. Передача параметрів в функцію C функції. Повернення результату з функції C функції. Рекурсивні функції C область видимості змінних C зовнішні об'єкти C вказівники C вказівник. Операції з вказівниками C покажчики. Арифметика покажчиків C покажчики. Константи і покажчики C покажчики. Покажчики та масиви C покажчики. Масиви покажчиків, рядки і багаторівнева адресація C покажчики. Покажчики в параметрах функції C покажчики. Динамічна пам'ять C покажчики. Покажчик як результат функції C покажчики. Управління динамічної пам'яттю C покажчики. Покажчики на функцію C покажчики. Покажчики на функції як параметри і результати функцій C покажчики. Функції зі змінною кількістю параметрів C struct. Визначення структур C struct. Структури як елементи структур C struct. Покажчики на структури C struct. Масиви структур C struct. Структури і функції C struct. union об'єднання C struct. Бітові поля С file. Введення-виведення і робота з файлами C file. Читання і запис бінарних файлів C file. Читання і запис структур в файл C file. Читання і запис текстових файлів C file. Форматування вводу-виводу C file. Позиціонування в потоці C file. Консольне введення-виведення

C file. Форматування вводу-виводу


Ще один спосіб читання і запису інформації в файлах представляють функції fprintf () і fscanf () . Вони дозволяють відформатувати записуючі і зчитуючі дані відповідно.

Функція fprintf () має наступний прототип:

int fprintf(указатель_на_поток, строка_форматирования, список_аргументов);

Ця функція записує дані, що передаються в якості третьої параметра, в файл з урахуванням форматування, що визначається рядком форматування. Перший параметр представляє покажчик на файловий потік, в який проводиться запис.

Рядок форматування і передача в неї значень визначаються також, як і у випадку з функцією printf ()

Наприклад, запишемо в файл масив структур:

#include <stdio.h>
 
struct person
{
    char name[20];
    int age;
};
int main(void)
{
    char * filename = "D://users.dat";
    struct person people[] = { "Tom", 23, "Alice", 27, "Bob", 31, "Kate", 29 };
    int n = sizeof(people)/sizeof(people[0]);
    FILE *fp;
    if ((fp = fopen(filename, "w")) == NULL)
    {
        perror("Error occured while opening file");
        return 1;
    }
     
    for(int i=0; i<n; i++)
    {
        fprintf(fp, "%s     %d\n", people[i].name, people[i].age);
    }
    fclose(fp);
    return 0;
}

Кожна структура має два поля - строкове поле name і числове поле age. Тому рядок форматування приймає відповідні специфікатор: "%s %d\n" .

Після запису ми отримаємо текстовий файл users.dat, який зможемо переглянути в будь-якому текстовому редакторі.

Для читання даних в певному форматі застосовується функція fscanf () , яка має наступний прототип:

int fscanf(указатель_на_поток, строка_форматирования, список_аргументов);

За фактом ця функція схожа на функцію scanf () , яка використовується для введення з консолі, тільки тепер вод здійснюється з файлу, покажчик на яке передається в якості першого параметра.

Функція повертає числове значення. Якщо досягнуто кінця файлу, то функція повертає значення EOF.

Наприклад, вважаємо і виведемо на консоль раніше записані в файл users.dat дані:

#include <stdio.h>
 
struct person
{
    char name[20];
    int age;
};
 
int main(void)
{   
    char * filename = "D://users.dat";
    FILE *fp;
    char name[20];
    int age;
    if ((fp = fopen(filename, "r")) == NULL)
    {
        perror("Error occured while opening file");
        return 1;
    }
     
    while((fscanf(fp, "%s   %d\n", &name, &age))!=EOF)
    {
        printf("%s      %d\n", name, age);
    }
    fclose(fp);
    return 0;
}

Для зчитування даних тут визначені допоміжні змінні name і age. І при виконанні функції fscanf як список аргументів передаються адреси цих змінних. Крім того, треба зазначити, що рядок форматування збігається з рядком, яка передавалася в попередньому прикладі при записі в файл: "%s %d\n" .

У підсумку поки при зчитуванні не буде досягнутий кінець файлу і функція не поверне значення EOF, вона буде зчитувати дані в змінні name і age, які потім будуть виводитися на консоль. У підсумку ми отримаємо наступний консольний висновок:

Tom 23
Аліса 27
Боб 31
Кейт 29

Наш партнер:
beta test mp3 playlist downloader