- •Додатковий матеріал до лекцій із дисципліни "Програмування"
- •1 Структури та об’єднання
- •1.1 Структури
- •1.2 Об’єднання та бітові поля
- •2 Функції
- •2.1 Передача параметрів за значенням
- •2.2 Передача параметрів за покажчиком
- •2.3 Функції та масиви
- •2.4 Функції з параметрами за замовченням
- •2.5 Функції з змінним числом параметрів
- •2.6 Передача параметрів в функцію main()
- •2.7 Рекурсивні та інлайн-функції
- •2.8 Функції, що повертають покажчик
- •2.9 Функції та структури
- •2.10 Перевантаження функцій та шаблони функцій
- •2.11 Покажчик на функцію
- •3 Робота з файлами
- •3.1 Відкриття та закриття файлів
- •3.2 Введення даних в файл та виведення даних з файлу
- •3.3 Керування файлами та каталогами
- •4 Багатофайлова компіляція
- •Література
3 Робота з файлами
3.1 Відкриття та закриття файлів
Приклад 3.1
#include<stdio.h> |
int main() |
{FILE *fp; char *fname ="myfile.txt"; |
char buff[100]; |
fp=fopen(fname,"r"); |
if((fp!=NULL) fgets(buff,50,fp); |
else {puts("ERROR_1"); return -1;} |
puts(buff); |
fp=freopen(fname,"a",fp); |
if(fp)!=NULL) fputs("abcdef",fp); |
else {puts("ERROR_2"); return -1;} |
fclose(fp); |
return 0;} |
|
|
Приклад 3.2
#include<stdio.h> |
int main() |
{FILE *ptr fopen("abc.doc","r"); |
if(ptr==NULL) |
{perror("Не могу открыть файл: "); return -1;} |
char c=fgetc(ptr); |
fclose(ptr); |
return 0;} |
|
|
Приклад 3.3
#include<stdio.h> |
int main() |
{FILE *fin=fopen("fname.txt","wb"); |
if(fin==NULL){puts("ошибка открытия файла"); return -1;} |
unsigned ff, hndl; |
ff=fin->flags; |
hndl=fin->fd; |
printf("%#x %d\n",ff,hndl);// 0x46 6 |
return 0;} |
|
3.2 Введення даних в файл та виведення даних з файлу
Приклад 3.4
#include<stdio.h> |
int main() |
{char s1='Z', str1[]="Запорожье", s2; |
FILE *fp1=fopen("abc.txt","w"); |
if(fp1==NULL){puts("ошибка открытия файла"); return -1;} |
fputc(s1,fp1); |
while(str1[i]!='\0') |
{fputc(str1[i],fp1); i++;} |
fputc('\n',fp1); |
printf("Введите символ или or Ctrl-Z"); |
while((s2=getchar())!=EOF) |
fputc(s2,fp); |
fclose(fp1); |
FILE *fp2=fopen("abc.txt","r"); |
if(fp2==NULL){puts("ошибка открытия файла"); return -1;} |
char s3,str2[10], s4; |
s3=fgetc(fp2); |
printf("%c\n",s3); |
for(int j=0;j<9;j++) |
{str2[j]=fgetc(fp2); |
printf("%c",str2[j]); } |
while((s4=fgetc(fp2))!=EOF) |
putchar(s4); |
fclose(fp2); |
return 0;} |
|
|
|
Приклад 3.5
#include<stdio.h> |
int main() |
{FILE *fp1=fopen("abc.txt","w"); |
if(fp1==NULL){puts("ошибка открытия файла"); return -1;} |
char *st1="Физика",*ms1[3]={"ТЕК","КЕ","ПТЦА"}; |
fputs(st1,fp1); |
fputs("\n",fp1); |
for(int i=0;i<3;i++) |
{fputs(mst1[i],fp1); |
fputs("\n",fp1); } |
fclose(fp1); |
FILE *fp2=fopen("abc.txt","r"); |
if(fp2==NULL){puts("ошибка открытия файла"); return -1;} |
char st2[20], mst2[3][20]; |
fgets(st2,20,fp2); |
puts(st2); |
for(int j=0;j<3;j++) |
{fgets(mst2[j],20,fp2); |
puts(mst2[j]); } |
fclose(fp2); |
return 0;} |
|
|
|
Приклад 3.6
#include<stdio.h> |
#include<string.h> |
void main() |
{FILE* fp=fopen("b.txt","w"); |
int n=0; |
char st1[]="Anna", st2[]="Маria",st3[20]; |
//char st1[]="Anna\n", st2[]="Маria\n",st3[20]; |
fputs(st1,fp); fputs(st2,fp); |
fclose(fp); |
fp=fopen("b.txt","r"); |
while(fgets(st3,20,fp)!=NULL) |
{puts(st3); n++;} |
printf("Число строк=%d",n); |
fclose(fp);} |
|
|
|
|
Приклад 3.7
#include<stdio.h> |
int main() |
{FILE *fp=fopen("abc.txt","w"); |
if(fp==NULL){puts("ошибка открытия файла"); return -1;} |
int a=5; float b=3.56; long c=50000; |
fprintf(fp1,”%d %f %ld\n”,a,b,c); |
int arr[5]={1,2,3,4,5}; |
float mas[5]={1.1,2.2,3.3,4.4,5.5}; |
for(int i=0;i<5;i++) |
fprintf(fp,"%d %f\n",arr[i],mas[i]); |
if((fp=freopen("data.txt","r",fp))==NULL) |
int n; float f; long k; |
fscanf(fp,"%d %f %ld\n",&n,&f,&l); |
printf("%d %.2f %ld\n",n,f,k); |
int a[5]; float m[5]; |
for(int j=0;j<5;j++) |
{fscanf(fp,"%d %f\n",&a[j],&m[j]); |
printf("%d %.2f\n",a[j], m[j]);} |
fclose (fp); |
return 0;} |
|
|
|
Приклад 3.8
#include<stdio.h> |
int main() |
{int a1=10; long b1=50000; char buf1[20]; |
sprintf(buf1,"a1=%d, b1=%ld",a1,b1); |
puts(buf1); |
float e, pi; |
char buf2[25]="2.718281, 3.141592"; |
sscanf(buf2,"%f, %f",&e,&pi); |
printf("e=%f pi=%f\n",e,pi); |
int a2; long b2; |
sscanf(buf1,"a1=%d, b1=%ld",&a2,&b2); |
printf("a2=%d b2=%ld\n",a2,b2); |
return 0;} |
|
Приклад 3.9
#include<stdio.h> |
int main() |
{FILE *fp1=fopen("abc.txt","wb"); |
if(fp1==NULL){puts("ошибка открытия файла"); return -1;} |
struct REC{int a; float b[2];}; |
REC str1={1, 2.2, 3.3}; |
fwrite(&str1,sizeof(REC),1,fp1); |
REC str2[3]={{1, 1.2, 1.3},{2, 2.2, 2.3},{3, 3.2, 3.3}}; |
fwrite(str2,sizeof(REC),3,fp1); |
fclose(fp1); |
FILE *fp2=fopen("abc.txt","rb"); |
if(fp2==NULL){puts("ошибка открытия файла"); return -1;} |
REC str3, str4[3]; |
fread(&str3,sizeof(REC),1,fp2); |
printf("%d %.1f %.1f\n", str3.a, str3.b[0],str3.b[1]); |
fread(str4,sizeof(REC),3,fp2); |
for(int i=0;i<3;i++) |
{printf("%d ", str4[i].a); |
printf("%.1f %.1f\n", str4[i].b[0],str4[i].b[1]);} |
fclose(fp2); |
return 0;} |
|
|
|
Приклад 3.10
#include<stdio.h> |
#define n 3 |
struct REC{unsigned id; |
char name[20]; |
unsigned mark;}; |
int main() |
{FILE *out,*in; |
REC rec; |
int flag, sz=sizeof(REC); |
long len,kol,n; |
if((out=fopen("mark.txt","wb"))==NULL) |
{perror("Выходной файл не открыт"); return 1; } |
do{ |
puts("Введіть № запису, прізвище, оцінку(0..5)"); |
scanf("%d",&rec.id); |
gets(rec.name); |
scanf("%d",&rec.mark); |
fwrite(&rec,sz,1,out); |
puts("Продолжить ввод? Да-1, Нет-0"); |
scanf("%d",&flag); |
}while(flag); |
fclose(out); |
if((in=fopen("mark.txt","rb"))==NULL) |
{perror("Входной файл не открыт"); return 2;} |
fseek(in,0,SEEK_END); |
len=ftell(in); |
kol=len/sz; |
printf("В файлі %d записів\n", kol); |
puts("Введіть номер запису для читання:"); |
scanf("%ld",&n); |
if(n>0&&n<=kol) |
{fseek(in,(i-1)*sz, SEEK_SET); |
fread(&rec,sz,1,in); |
printf("id=%d name: %s ", rec.id_rec,rec.name); |
printf("mark: %d\n",rec.mark); } |
else puts("Поза файлом!"); |
fclose(in); |
return 0; } |
|
|
|
|
