Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Копия Си лекция каз.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
3.05 Mб
Скачать

Void main ()

{

int n;

char str[50], str1[50], ch;

FILE *fp;

// Файлға мәлімет жазу

fp = fopen("ex.txt","w");

puts ("Бүтін сан енгізіңіз: "); scanf("%d",&n);

fprintf (fp, "%d\n", n) ;

puts ("Символ енгізіңіз: "); ch=getchar();

putc (ch, fp);

puts ("Сөз тіркесін енгізіңіз: "); gets(str);

fputs(str, fp);

fclose(fp);

// Файлдан мәлімет оқу

if((fp = fopen("ex.txt","r")) != NULL)

{

fscanf (fp, "%d", &n); printf ("n=%d\n", n) ;

ch = getc (fp); putchar (ch);

fgets(str1, 50, fp); puts (str1);

fclose (fp);

}

else printf ("\nФайлдан мәлімет оқылмайды!");

}

Мұндағы fgets()функциясының екінші параметрі N – оқылатын символдар саны, оған '\0' белгісі де қосылады. Бұл функция өз жұмысын N-1 символын оқығаннан кейін немесе '\0' белгісі кездес­кенде аяқтайды. Екеуінде де сөз тіркесі соңына '\0' белгісі қосылады. fgets() функциясы оқылған сөз тіркесі адресін қайтара­ды немесе файл оқылып болғанда (не қате шықса), NULL белгісін береді.

fputs() функциясы әрекет дұрыс орындалса, соңғы оқылған символ кодын қайтарады, ал қате болса, EOF (файл соңы) белгісін береді. Бұл функция курсорды автоматты түрде келесі жолға көшірмейді.

Жоғарыдағы функциялар файл мәліметтерін біртіндеп, символ­дан соң келесі символды қарастыра отырып өңдейді. Си тілі файлдар­мен жиым сияқты жұмыс істеуге де мүмкіндік береді, яғни кез келген байтты жеке өңдеуге де болады. Файл ішіндегі белгілі бір орынды айқындау үшін мына функция қолданылады:

fseek(файлға нұсқауыш,бастапқы нүктеден ығысу, бастапқы нүкте);

Екінші аргумент типі long, оның мәні оң да, теріс те болуы мүм­кін. Ол бастапқы нүктеден қанша орынға (байтпен) ығысу керек екендігін көрсетеді. Үшінші аргумент файлдағы бастапқы нүкте орнын анықтайтын код болып табылады. Осы код үшін мынадай мәндер тағайындалған:

  1. - файл басы;

  2. - ағымдағы позиция;

  3. - файл соңы.

Дұрыс орындалғанда, fseek() функциясы 0 мәнін береді, ал егер қате (мысалы, файлдың сол жақ шекарасынан ары аспақшы болғанда) болса, онда -1 береді.

fwrite және fread функцияларын пайдалану

Құрылымдарды пайдаланатын файлдармен жұмыс істеу кезінде fread()/fwrite() функцияларын пайдаланған ыңғайлы. Олардың жазылуы:

fread(ptr,size,n,fp);

мұнда fp файлынан әрқайсысы size байттан тұратын мәліметтің n блогы ptv нұсқауышы көрсетіп тұрған жады аймағына оқылады (оқылатын блок үшін алдын ала орын дайындап қою қажет).

fwrite (ptr,size,n,fp);

мұнда ptr нұсқауышы көрсетіп тұрған жады аймағында орналасқан әрқайсысы size байттан тұратын мәліметтің n блогы ашық тұрған fp файлына жазылады.

Осы функцияларды қолданудың бір мысалын келтірейік:

typedef struct

{

char author [30];

char title [50];

Int pages;

} BOOK;

BOOK b1={"Kernighan", "С Language", 256},b2;

FILE *fp;

Void main()

{...

fp=fopen("struct.txt", "w+");

// файл әрі оқу, әрі жазу үшін ашылды

fwrite(&b1, sizeof(BOOK), 1, fp);

fseek(fp,0,0); // маркер файл басына

fread(&b2, sizeof(BOOK), 1, fp);

printf("Авторы – %s,аты – %s,беттер саны

%d\n",b2.author, b2.title, b2.pages);

}