Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комплексное пособие Си.pdf
Скачиваний:
57
Добавлен:
12.03.2015
Размер:
1.57 Mб
Скачать

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

int feof (FILE *f);

Функция возвращает значение “истина” (не 0), если достигнут конец файла, и значение “ложь” (0) в противном случае.

Примеры

Задача. Входной файл 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);

115

getch();

}

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

Программа:

#include <stdio.h>

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

char * ZamenaBukv

(char *str)

 

/* Функция

возвращает адрес строки str */

 

{

i;

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

int

for

( i = 0;

str[i] ; i++ )

str[i] += 32;

 

if (str[i]

>= ‘A’ && str[i] <= ‘Z’)

return

str;

 

 

}

 

 

 

 

 

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

*/

 

main()

 

 

 

/* указатели на входной и выходной файлы */

{ FILE *f1, *f2;

char fname1[13], fname2[13];

 

/* имена входного и выходного файлов */

 

char

str[81];

/*очередная строка файла*/

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

 

gets (fname1);

(fname1, "r")) == NULL)

 

if

((f1= fopen

 

{

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;

}

Задача. Файл f1.txt содержит последовательность целых чисел, разделенных пробелами или символом перевода строки. Вычислить сумму чисел.

116

Программа:

#include <stdio.h>

void main()

 

{ FILE

*f;

/* очередное число */

int

c;

long

s=0;

/* сумма */

if (f=fopen(“f1.txt”, “r”))

{while (!feof(f))

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

s+=c;

}

printf(“Сумма=%ld\n”, s); fclose (f);

}

else puts (“Файл f1.txt не найден”);

}

Контрольные вопросы

1.Что представляет собой текстовый файл в MS DOS?

2.Для чего служит функция fopen()?

3. Для чего служит функция fclose()?

4.Дан текстовый файл f1.txt, состоящий из строк длиной до 80 символов. Напишите программу печати первых n строк файла. Значение n вводится с клавиатуры.

5.Дан текстовый файл f1.txt, состоящий из строк длиной до 80 символов.

Напишите фрагмент ввода с клавиатуры и добавления в конец файла n строк. Значение n также вводится с клавиатуры.

6.Как открыть текстовый файл для чтения?

7.Какая функция используется для чтения одной строки файла?

8.Для чего нужно закрывать файлы?

117