
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 - проверка на конец файла.
Прототип функции: