- •Программирование на языке c
- •Работа с файлами и строками на языке c
- •Основные теоретические сведения Оператор выбора – switch…case…default
- •Оператор безусловного перехода - goto
- •Функции языка c
- •Определение функции
- •Объявление функции
- •Вызов функции
- •Работа с файлами
- •Открытие файла – fopen
- •Закрытие файла – fclose
- •Перемещение позиции ввода/вывода – fseek
- •Запись символа / строки в файл – fputc / fputs
- •Чтение символа / строки из файла – fgetc / fgets
- •Форматированный вывод в файл – fprint
- •Форматный ввод из файла – fscanf
- •Функции стандартной библиотеки ввода/вывода – stdio.H
- •Функции работы со строками – string.H, mem.H, mbstring.H
- •Задание
- •Варианты задания
Чтение символа / строки из файла – fgetc / fgets
Функция читает символ / строку символов из файла.
int fgetc(FILE *fileid);
char *fgets(char *s, int n, FILE *fileid);
Возвращает следующий символ из указанного входного файла fileid. fgets читает символы из файла fileid в строку s. Чтение завершается, когда считаны n - 1 символ или символ конца строки. fgets сохраняет символ конца строки в конце s. В конец s добавляется также нуль-символ, чтобы пометить конец строки.
В случае успешного завершения fgetc возвращает прочитанный символ, преобразованный в тип int без расширения знакового разряда. При успешном выполнении fgets возвращает указатель на строку s. При ошибке или достижении конца файла возвращает EOF.
Пример:
#include <string.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{ FILE *stream;
char string[] = "This is a test";
char ch;
/* открывает файл для корректировки */
stream = fopen("DUMMY.FIL", "w+");
/* пишет строку в файл */
fwrite(string, strlen(string), 1, stream);
/* позиционирует файл в начало */
fseek(stream, 0, SEEK_SET);
do {
/* читает символ из файла */
ch = fgetc(stream);
/* отображает символ */
putch(ch);
} while (ch != EOF);
/* повторно читает строку из файла */
fseek(stream, 0, SEEK_SET);
fgets(msg, strlen(string)+1, stream);
fclose(stream);
return 0;
}
Форматированный вывод в файл – fprint
Функция форматированного вывода в файл.
int fprint(FILE *fileid, const char *format[, argument, ...]);
fprintf принимает последовательность аргументов argument, форматирует каждый из них в соответствии со спецификацией формата, передаваемой в строке формата, на которую указывает format, и выводит сформатированные данные в файл fileid. Количество спецификаций формата должно совпадать с количеством аргументов. Спецификации формата – см. функцию printf.
Возвращается число выведенных байтов. В случае ошибки возвращается EOF.
Пример:
#include <stdio.h>
int main(void)
{ FILE *stream;
int i = 100; char c = 'C'; float f = 1.234;
/* открывает файл для корректировки */
stream = fopen("DUMMY.FIL", "w+");
/* пишет данные в файл */
fprintf(stream, "%d %c %f", i, c, f);
/* закрывает файл */
fclose(stream);
return 0;
}
Форматный ввод из файла – fscanf
Функция форматного ввода из файла.
int fscanf(FILE *fileid, const char *format [, address,...]);
fscanf посимвольно читает последовательность входных полей из файла fileid. Каждое поле форматируется в соответствии со спецификацией формата, передаваемой fscanf в строке формата, на которую указывает format. Наконец, fscanf записывает форматированный ввод по адресам, переданным в качестве аргументов address, следующих за format. Количество спецификаций формата и адресов должно совпадать с количеством входных полей. См. scanf для деталей о спецификаторах формата. scanf может прекратить обработку текущего поля до достижения обычного символа конца поля (символа-разделителя), или вообще завершиться по различным причинам.
fscanf возвращает количество успешно прочитанных, преобразованных и записанных в память входных полей; возвращаемое значение не включает прочитанные поля, которые не были записаны в память.
Если scanf пытается читать за концом файла, возвращается EOF.
Если ни одно поле не записано в память, возвращается 0.
Пример:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{ int i;
printf("Input an integer: ");
/* читает целое из стандартного входного потока */
if (fscanf(stdin, "%d", &i))
printf("The integer read was: %i\n", i); else {
fprintf(stderr, "Error reading an integer from stdin.\n");
exit(1);
}
return 0;
}