int fputs (const char *s, FILE *stream);
Ko‘rinishida aniqlangan. Satr oxiridagi yangi satrga o‘tish belgisi va terminatorlar oqimga chiqarilmaydi. Oqimga chiqarish muvaffa-qiyatli bo‘lsa, funksiya nomanfiy son qaytaradi, aks holda EOF.
foef() funksiyasi aslida makros bo‘lib, fayl ustida o‘qish-yozish amallari bajarilayotganda fayl oxiri belgisi uchragan yoki yo‘qligini bildiradi. Funksiya
int feof(FILE *stream);
Prototipiga ega bo‘lib u fayl oxiri belgisi uchrasa, noldan farqli sonni qaytaradi, boshqa holatlarda 0 qiymatini qaytaradi.
Quyida keltirilgan misolda faylga yozish va o‘qishga amallari ko‘rsatilgan.
#include
#include
int main()
{
char s;
FILE *in,*out;
if((in=fopen("D:\\USER\\TALABA.TXT","rt"))==NULL)
{
cout<<"Talaba.txt faylini ochilmadi!!\n";
return 1;
}
if((out=fopen("D:\\USER\\TALABA.DBL","wt+"))==NULL)
{
cout<<"Talaba.dbl faylini ochilmadi!!\n";
return 1;
}
while (!feof(in))
{
char c=fgetc(in);
cout<fputc(c,out);
}
fclose(in);
fclose(out);
return 0;
}
Programmada «talaba.txt» fayli matn fayli sifatida o‘qish uchun ochilgan va u in o‘zgaruvchisi bilan bog‘langan. Xuddi shunday, «talaba.dbl» matn fayli yozish uchun ochilgan va out bilan bog‘langan. Agar fayllarni ochish muvaffaqiyatsiz bo‘lsa, mos xabar beriladi va programma o‘z ishini tugatadi. Keyinchalik, toki in fayli oxiriga etmaguncha, undan belgilar o‘qiladi va ekranga, hamda out fayliga chiqariladi. Programma oxirida ikkita fayl ham yopiladi.
Masala. G‘alvirli tartiblash usuli.
Berilgan x vektorini pufakcha usulida kamaymaydigan qilib tartiblash quyidagicha amalga oshiriladi: massivning qo‘shni elementlari xk va xk+1 (k=1,..,n-1) solishtiriladi. Agar xk>xk+1 bo‘lsa, u holda bu elementlar o‘zaro o‘rin almashadi. SHu yo‘l bilan birinchi o‘tishda eng katta element vektorning oxiriga joylashadi. Keyingi qadamda vektor boshidan n-1 o‘rindagi elementgacha yuqorida qayd qilingan yo‘l bilan qolgan elementlarning eng kattasi n-1 o‘ringa joylashtiriladi va h.k.
G‘alvirli tartiblash usuli pufakchali tartiblash usuliga o‘xshash, lekin xk va xk+1 (k=1,2,3,..,n-1) elementlar o‘rin almashgandan keyin «g‘alvirdan» o‘tkazish amali qo‘llaniladi: chap tomondagi kichik element imkon qadar chap tomonga tartiblash saqlangan holda ko‘chiriladi. Bu usul oddiy pufakchali tartiblash usuliga nisbatan tez ishlaydi.
Programma matni:
#include
#include
int * Pufakchali_Tartiblash(int*,int);
int main()
{
char fnomi[80];
printf("Fayl nomini kiriting:");
scanf("%s", &fnomi);
int Ulcham,i=0,* Massiv;
FILE * f1, *f2;
if((f1=fopen(fnomi,"rt"))==NULL)
{
printf("Xato:%s fayli ochilmadi!",fnomi);
return 1;
}
fscanf(f1,"%d",&Ulcham);
Massiv=(int *)malloc(Ulcham*sizeof(int));
while(!feof(f1))
fscanf(f1,"%d",&Massiv[i++]);
fclose(f1);
Massiv=Pufakchali_Tartiblash(Massiv,Ulcham);
f2=fopen("natija.txt","wt");
fprintf(f2,"%d%c",Ulcham,' ');
for(i=0; ifprintf(f2,"%d%c",Massiv[i],' ');
fclose(f2);
return 0;
}
int * Pufakchali_Tartiblash(int M[],int n)
{
int almashdi=1, vaqtincha;
for(int i=0; i{
almashdi=0;
for(int j=0; jif (M[j]>M[j+1])
{
almashdi=1;
vaqtincha=M[j];
M[j]=M[j+1];
M[j+1]=vaqtincha;
int k=j;
if(k)
while(k && M[k]>M[k-1])
{
vaqtincha=M[k-1];
M[k-1]=M[k];
M[k]=vaqtincha;
k--;
}
}
}
return M;
}
Programmada berilganlarni oqimdan o‘qish yoki oqimga chiqarishda fayldan formatli o‘qish - fscanf() va yozish - fprintf() funksiyalaridan foydalanilgan. Bu funksiyalarning mos ravishda scanf() va printf() funksiyalaridan farqi - ular berilganlarni birinchi argument sifatida beriladigan matn fayldan o‘qiydi va yozadi.
Nomi foydalanuvchi tomonidan kiritiladigan f1 fayldan butun sonlar massivining uzunligi va qiymatlari o‘qiladi va tartiblangan massiv f2 faylga yoziladi.
Vektorni tartiblash Pufakchali_Tartiblash() funksiyasi tomoni-dan amalga oshiriladi. Unga vektor va uning uzunligi kiruvchi parametr bo‘ladi va tartiblangan vektor funksiya natijasi sifatida qaytariladi.
Navbatdagi ikkita funksiya fayl oqimidan formatlashmagan o‘qish-yozishni amalga oshirishga mo‘ljallangan.
fread() funksiyasi quyidagi prototipga ega:
Do'stlaringiz bilan baham: |