Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование4172 / Лекции / Лекция 13. Структуры и работа с файлами.doc
Скачиваний:
49
Добавлен:
12.03.2015
Размер:
105.98 Кб
Скачать

Int fputs (char *s, file *f);

Функция записывает строку с указателем s в файл с указателем f (без завершающего нуль-символа).

Функция возвращает код последнего записанного символа.

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

#include <stdio.h>

/* Функция замены прописных латинских букв на строчные */

char * ZamenaBukv (char *str)

/* Функция возвращает адрес строки str */

{

int i; /* индекс текущего символа строки */

for ( i = 0; str[i] ; i++ )

if (str[i] >= ‘A’ && str[i] <= ‘Z’) str[i] += 32;

return str;

}

/* Главная функция */

main()

{ FILE *f1, *f2; /* указатели на входной и выходной файлы */

char fname1[13], fname2[13]; /* имена входного и выходного файлов */

char str[81]; /*очередная строка файла*/

puts ("\n Введите имя входного файла");

gets (fname1);

if ((f1= fopen (fname1, "r")) == NULL)

{ puts ("Файл не найден");

getch();

return 1;

}

puts ("Введите имя выходного файла");

gets (fname2);

f2 = fopen(fname2, "w");

while (fgets(str, 81, f1))

{ fputs(ZamenaBukv(str),f2);

}

fclose (f1);

fclose (f2);

return 0;

}

Пример 13.9. Входной файл st.txt содержит сведения о сдаче студентами группы экзаменационной сессии. Каждая запись файла содержит фамилию и инициалы студента (15 символов) и пять оценок (5 символов) и завершается символом ”перевод строки”. Напечатать список студентов с указанием среднего балла каждого студента.

/*-------------------------------------------------------*/

/* Печать среднего балла каждого студента */

/*-------------------------------------------------------*/

#include <stdio.h>

#include <conio.h>

struct STUDENT

{ char fio[15]; /* фамилия и.о. */

char oc[7]; /* 5 оценок + '\n' + '\0' */

};

void main()

{ FILE *f; /* указатель на входной файл */

struct STUDENT tz; /* текущая запись файла */

int i,

s; /* сумма оценок */

if ((f= fopen("st.txt","r")) == NULL)

{ puts ("Файл st.txt не найден");

return;

}

puts ("\nФамилия и.о. Ср.балл");

puts ("------------------------------");

while (fgets((char *)&tz, sizeof(struct STUDENT), f) != NULL)

{ for (i=0,s=0; i<5; i++)

s+=tz.oc[i]-'0';

tz.fio[14]='\0';

printf("%s %.1f\n", tz.fio, (float)s/5);

}

fclose(f);

getch();

}

5. fscanf – форматированный ввод из файла.

Функция отличается от функции scanf только тем, что имеет дополнительный первый параметр – указатель на файл. Она используется, когда вводимые данные нужно преобразовать из символьного вида в типы int, long, float или прочие.

Пример 13.10. Допустим, файл содержит текст из 20 символов, целое число и вещественное число, разделенные пробелами. При вводе нужно преобразовать текст в символьную строку, а числа – в типы int и float.

char a[21];

int b;

float c;

FILE *f;

fgets (a, 21, f);

fscanf (f, “%d %f”, &b, &c);

6. fprintf – форматированный вывод в файл.

Первый параметр – указатель на файл, остальные – как у функции printf.

7. feof - проверка на конец файла.

Прототип функции: