Форматированный ввод-вывод данных

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

Функция форматированного ввода вида

fscanf (fp,”форматная строка“, &аргумент,…)

выполняет ввод (чтение) данных из открытого файла fp по адресу аргумента. Символы форматной строки задают способ преобразования вводимых байтов. Отдельное преобразуемое поле начинается с текущей позиции в буфере потока. Завершением поля считается символ пробела или перевода строки. Форматная строка обрабатывается слева направо.

Функция форматированного вывода вида

fprintf (fp, ”форматная строка”, аргумент,…)

выполняет вывод (запись) в открытый файл fp значение аргумента.

Символы форматной строки задают способ, в соответствии с которым выполняется преобразование чисел в последовательность символов. Полученная последовательность символов помещается в специфицированный поток. Все остальные символы строки формата передаются в поток без преобразования.

Пример. Требуется записать в файл (kvadrnum.dat) возведенные в квадрат целые числа, затем прочитать их из файла и вывести на экран. Демонстрируется использование функций файлового и стандартного форматированного ввода-вывода текстовых файлов на диске. При вводе исходных данных осуществляется их проверка.

Программа.

# include <stdio.h>

# include<conio.h>

int main ()

{ char buffer [81], /* буфер для приема строки */

*ptr=”Массив_чисел_типа_integer_в_файле:”; / *заголовок массива*/

FILE *fp; /* указатель файла */

int first, last, /*начальное и конечное числа */

i, j, /* переменные для циклов */

numbers [256]; /* массив чисел */

clrscr (); /* очистка экрана */

while (1) /* бесконечный цикл ввода */

{ print (“Введите начальное число (больше нуля):”);

scanf (“%d”, &first);

printf (“Введите конечное число (0..255):”);

scanf (“%d”, &last);

/* Проверка корректности ввода чисел: */

if (first >= 0 && last >= first && last < 256)

break; /* выход из цикла ввода */

else printf (“\a\n”); /* сигнал об ошибке */

}

/* Открытие файла: */

if ((fp = fopen (“C:\\TC\\MYFILES\\kvadrnum.dat”,”wt”)) == NULL)

{ puts (“Ошибка открытия файла “);

return 253; /* аварийное завершение программы */

}

puts (“Открыт файл (KVADRNUM.DAT) “
” для ввода и вывода квадратов целых чисел.”);

fprintf (fp, “%s\n”, ptr); /* запись заголовка массива в файл */

for (i = first;i <= last; i++) /* цикл по числам */

fprintf (fp,”%d\n”, i*i); /* запись квадрата числа в файл */

i = last – first+1; /* количество чисел в файле */

printf (“Записано чисел в файле: %2d\n”, i);

rewind (fp); /* установка указателя на начало файла */

fscanf (fp,”%s”, buffer); /*чтение заголовка массива из файла в буфер*/

puts (buffer); /* вывод заголовка файла на экран */

for (j=0; i– –; j++) /* цикл чтения чисел из файла и вывод */

{ fscanf (fp, “%d”, &numbers [j]); /* ввод числа из файла fp в массив */

printf (“%3d-е число =%5d;\n”, j+1,numbers [j]); /* вывод на экран */

}

printf (“Прочитано из файла: %2d чисел.”, j);

fclose (fp); /* закрытие файла */

puts(“\n Нажмите на любую клавишу …”);

getch (); /* задержка экрана результатов */

return 0; /*нормальное окончание программы*/

}

Результаты программы:

Введите начальное число (больше 0): 3

Введите конечное число (0..255): 7

Открыт файл (KVADRNUM.DAT) для ввода и вывода квадратов целых чисел.

Записано чисел в файле: 5

Массив_чисел_типа_integer_в_файле:

1-е число = 9

2-е число = 16

3-е число = 25

4-е число = 36;

5-е число = 49;

Прочитано из файла: 5 чисел.

Нажмите любую клавишу…

Пример. Требуется записать данные (целое число, символ, строку) в текстовый файл exemfile.txt, прочесть их из файла и вывести на экран.

Демонстрируется использование основных функций работы с файлами в текстовом режиме.

Программа.

#include <stdio.h> /* для команд ввода-вывода */

#include <conio.h> /* для функций clrscr, getch */

int main()

{ int n; /* переменная для целого числа */

char str[50], str1[50], ch; /* символьные массивы и переменная */

FILE *fp; /* файловая переменная-указатель */

clrscr (); /* очистка экрана */

/* Открываем текстовый файл для записи и чтения и заполняем его: */

if ((fp=fopen (“C:\\TC\\MYFILES\\exmfile.txt”, “w+”))==NULL

{ perror (“Ошибка открытия файла”);

return 1; /* аварийное завершение программы */

}

puts (“Запись разнотипных данных в текстовый файл:”);

puts (“Введите целое число:”);

scanf (“%d”, &n);

fprintf (fp, “%d”, n); /* запись целого числа в файл */

fflush (stdin); /* очистка буфера ввода */

puts (“Введите символ:”);

ch=getchar();

putc (ch, fp); /* запись символа в файл */

fflush (stdin); /* очистка буфера ввода */

puts (“Введите строку:”);

gets (str);

fputs (str, fp); /* запись строки в файл */

rewind (fp); /* установка маркера на начало файла */

puts (“\nВывод данных из файла на экран:”);

fscanf (fp, “%d”, &n); /* чтение целого числа из файла */

printf (“n=%d\n”, n); /* вывод целого числа на экран */

ch=getc (fp); /* чтение символа из файла */

printf (“%c\n”,ch); /* вывод символа на экран */

fgets (str1, 50, fp); /* чтение строки из файла */

puts (str1); /* вывод строки на экран */

fclose (fp); /* закрытие файла */

puts (“Нажмите на любую клавишу…”);

getch(); /* задержка экрана результатов */

return 0; /* нормальное завершение программы */

}

Результаты программы:

Запись разнотипных данных в текстовый файл:

Введите целое число:

Введите символ:

W

Введите строку:

Привет, программист!

Вывод данных из файла на экран:

n=345

W

Привет, программист!

Нажмите на любую клавишу…


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: