- •Конспект лекций по дисциплине "Программирование"(іі часть)
- •123 "Компьютерная инженерия"
- •1 Функции 6
- •1 Функции
- •1.1 Определение, описание, вызов функции
- •Void prn1(int X)
- •Void prn2()
- •Void main()
- •Void main()
- •Void main()
- •1.2 Передача параметров в функции по значению и по указателю
- •Void func(int intg,float fltp)
- •Void main()
- •Void main()
- •1.3 Функции и массивы
- •Int func1(int arr[]) {...}
- •Void main()
- •Void main()
- •Void main()
- •1.4 Функции с умалчиваемыми значениями параметров
- •Void main()
- •Void main()
- •1.5 Функции с переменным числом параметров
- •Void main()
- •Void main()
- •1.6 Передача параметров в функцию main()
- •Int main(int argc,char**argv,char**envp)
- •Int main(int argc,char **argv)
- •1.7 Рекурсивные и подставляемые функции
- •Void main()
- •Void main()
- •1.8 Функции, возвращающие указатель
- •Void main()
- •1.9 Функции и структуры
- •Void f1(stud a)
- •Void f3(stud *p)
- •Void main()
- •1.10 Перегрузка функций
- •Void main()
- •Void main()
- •Int mul(double X,double y)
- •Int sum(int X) {return 2*X;}
- •Void main()
- •1.11 Шаблоны функций
- •Int main()
- •Void func(a);
- •Int main()
- •1.12 Указатели на функции
- •Void main()
- •Int f2(int X){return X*X;};
- •Void main()
- •Void main()
- •2 Работа с файлами
- •2.1 Потоковый ввод-вывод
- •2.2 Открытие и закрытие потока
- •Int fclose(file *имя);
- •Int main()
- •Void perror(const char *str);
- •2.3 Посимвольный ввод-вывод
- •Int fputc(int ch, file *fp);
- •Int fgetc(file *fp);
- •2.4 Построчный ввод-вывод
- •Int fputs(char*string, file *fp);
- •2.5 Форматированный ввод-вывод
- •Int fprintf(file *fp, char *format [,аргумент]…);
- •Int fscanf(file *fp, char *format [,указатель]…);
- •2.6 Форматированные вывод в строку и ввод из строки
- •Int a2; long b2;
- •2.7 Блоковый ввод-вывод
- •Int fwrite(void *ptr, int size, int n, file *fp);
- •Int fread(void *ptr,int size,int n,file *fp);
- •2.8 Произвольный доступ к файлу
- •Int fseek(file *fp, long offset, int from_where);
- •Int main()
- •3 Многофайловая компиляция
- •Void main()
- •Void main()
- •4 Объекты и их атрибуты
- •Void main()
- •5 Ссылки
- •Int &хref; // ошибка!!
- •Int f2_ptr(int *a, int *b) {return *a-*b;}
- •Int f4_ref(const int&a, int &b)
- •Void main()
- •Литература
Int fgetc(file *fp);
Эта функция возвращает символ из открытого потока fp, связанного с файлом, или EOF (–1) в случае ошибки или достижения конца файла.
Пример. Чтение символов из открытого для чтения файла через поток fp
FILE *fp=fopen("abc.txt","r"); //открытие потока для чтения
if(fp==NULL){puts("ошибка открытия файла"); return -1;}
char z1, str2[9],z2;
z1=fgetc(fp); //чтение символа из файла через поток fp
printf("%c\n",z1);//вывод на экран прочитанного символа
for(int j=0;j<9;j++)
{str2[j]=fgetc(fp); //чтение 9-и символов из файла
printf("%c",str2[j]);} //вывод на экран cчитанных символов
while((z2=fgetc(fp))!=EOF) //чтение символов из файла
putchar(z2);//вывод на экран прочитанных символа
fclose(fp); //закрытие потока
2.4 Построчный ввод-вывод
Функция построчной записи (вывода) в файл имеет прототип:
Int fputs(char*string, file *fp);
Эта функция переносит байты из строки string в открытый файл через поток fp. Перенос завершается при достижении символа '\0', который в файл не заносится. В случае успеха функция возвращает код последнего записанного в файл символа, а в случае ошибки – EOF. Необходимо следить, чтобы записываемая в файл последовательность символов имела '\0', иначе файл может оказаться большим.
Пример. Запись строк в открытый для записи файл через поток fp
FILE *fp=fopen("abc.txt","w"); //открытие потока для записи
if(fp==NULL){puts("ошибка открытия файла"); return -1;}
char *s1=”Физика”,*ms1[3]={"ТЕК","КЕ","ПТЦА"};
fputs(s1,fp); //з апись строки в файл через поток fp
fputs("\n",fp); // з апись строки с \n в файл через поток fp
for (int i=0;i<3;i++)
{fputs(ms1[i],fp); // запись 3-х строк в файл через поток fp
fputs("\n",fp);}
fclose(fp);//закрытие потока
Функция построчного чтения (ввода) из файла имеет прототип:
char*fgets(char *string,int N,FILE *fp);
Эта функция принимает байты из открытого файла и размещает их по адресу, заданному указателем string. Прием завершается после приема N байт или при получении символа '\n', который тоже передается в строку string. Последним символом является '\0'. В случае успеха возвращает указатель на строку string, а в случае ошибки или достижения конца файла – NULL–указатель. Для успешного чтения строки из файла надо зарезервировать достаточное место в памяти.
Пример. Чтение строк из открытого для чтения файла через поток fp
FILE *fp=fopen("abc.txt","r"); // открытие потока для чтения
if(fp==NULL){puts("ошибка открытия файла"); return -1;}
char s2[20], ms2[3][20]; // зрезервируем память
fgets(s2,20,fp);// чтение из файла строки, < 20 символов
puts(st2); // вывод на экран прочитанной строки
for(int j=0;j<3;j++)
{fgets(ms2[j],20,fp); // чтение из файла 3-х строк, <20 сим-в
puts(ms2[j]);} // вывод на экран считанных строк
fclose(fp); // закрытие потока
Функция fgets(), получив из потока (файла) символ '\n', записывает его в строку и еще дописывает символ '\0'. Функция fputs(), встретив символ '\0' завершает запись в файл.
Таким образом, если записывать в файл строки без символа '\n' в конце строки функцией fputs(), то в файле будет только одна строка. При чтении функцией fgets() строки из файла функция puts() выведет на экран одну суммарную строку. Если записывать в файл строки с символом '\n' в конце, используя функцию fputs(), в файле будет несколько строк с символом '\n'. При чтении строк из файла функцией fgets() символ '\n' преобразуется в символы '\n', '\0', а функция puts() выведет на экран строки с символом '\n' в конце каждой строки, т.е. между выводимыми строками появятся пустые строки.
Пример. Запись и чтение строк без символа '\n' и с символом '\n'.
FILE* pf=fopen("b.txt","w"); //открытие потока
if(pf==NULL){puts("ошибка открытия файла"); return -1;}
char st1[]="Anna",st2[]="Маria",st3[20]; int n=0;
fputs(st1,pf); //запись в файл 4 символов
// fputs("\n",fp); //запись \n в файл через поток fp (2 символа)
fputs(st2,pf); //запись в файл 5 символов
//fputs("\n",fp); //запись \n в файл через поток fp (2 символа)
fclose(pf); //размер файла 9 байт (или 13 байт)
pf=fopen("b.txt","r");
if(pf==NULL){puts("ошибка открытия файла"); return -1;}
while(fgets(st3,20,pf)!=NULL)
{puts(st3); n++;}
printf("Число строк=%d",n);
fclose(pf);
На экран выведется
в первом случае: |
во втором случае |
AnnaМаria Число строк=1
|
Anna
Маria
Число строк=2 |
