- •Proqramlaşdırmanın əsasları
- •3. Yaddaş və verilənlərin tipləri
- •3.1. Yaddaş və onun növləri
- •3.2. Standart tip verilənlərin ölçüsü
- •3.3. Dəyişənlərin elan olunması
- •3.4. Konstantlar (Sabitlər)
- •3.5. İfadələr
- •4. Xətti və budaqlanan alqoritmlərin proqramlaşdırılması
- •4.1. Xətti alqoritmlərin proqramlaşdırılması
- •3.7. Tiplərin çevrilməsi
- •Müstəqil işləmək üçün tapşırıqlar
- •4.2. Giriş/çıxış operatorları
- •4.3. Budaqlanan alqoritmlərin proqramlaşdırılması
- •4.3.1. Şərt operatoru
- •4.3.3. Seçmə (variant) operatoru
- •4.3.4. Goto operatoru
- •4.3.5. Proqramın exit operatoru ilə dayandırılması
- •Müstəqil işləmək üçün tapşırıqlar
- •Dövri alqoritmlərin proqramlaşdırılması
- •5.1. Önşərtli dövr operatoru
- •5.2. Sonşərtli dövr operatoru
- •5.3. Parametrli dövr operatoru
- •5.4. Break operatoru
- •5.5. Continue operatoru
- •Müstəqil işləmək üçün çalışmalar
- •Funksiyalar
- •6.1. Funksiyanın sintaksisi
- •6.2. Funksiyanın təyin olunması
- •6.3. Funksiyanın çağırılması
- •6.4. Prototipin yaradılması
- •6.5. Lokal dəyişənlər
- •6.6. Qlobal dəyişənlər
- •6.7. Statik lokal dəyişənlər
- •6.8. Məlumatın funksiyaya göndərilməsi
- •6.9. Funksiyadan qiymətin qaytarılması
- •Müstəqil işləmək üçün tapşırıqlar
- •Massivlər
- •7.1. Birölçülü massivlər
- •7.2. İkiölçülü massivlər
- •İkiölçülü massivin ekrana çıxarılması:
- •Müstəqil işləmək üçün tapşırıqlar
- •Simvollar və sətirlər
- •8.1. Simvol və sətirlərin sintaksisi
- •Sətirlərlə işləyən funksiyalar
- •Müstəqil işləmək üçün tapşırıqlar
- •Fayllar: fayldan daxiletmə
- •Və fayla çıxış
- •Ikilik və mətn faylları
- •Fstream standart kitabxanası
- •Fayla girişin ümumi alqoritmi
- •9.4. Faylın açılması
- •9.4.1. Yazmaq üçün faylın açılması
- •9.4.2. Oxumaq üçün faylın açılması
- •9.4.3. Faylın oxumaq və yazmaq üçün açılması
- •9.5. Faylın bağlanması
- •9.6. Fayla yazmaq və fayldan oxumaq
- •Strukturlar və siniflər
- •Strukturlar və onların elanı
- •Int height;
- •Strukturun dəyişəninin elanı
- •Strukturun inisiallaşdırılması
- •Strukturların funksiya parametri kimi ötürülməsi
- •Siniflər
- •Operatorlar
- •Operatorların üstünlük dərəcəsi
- •Sərhəd qiymətlərinin sabitləri
- •Həqiqi tiplər üçün sabitlər – float.H faylı
- •C dilinin standart funksiyalar kitabxanası
- •Hesabi funksiyalar – math.H faylı
- •Standart fayllar üçün giriş-çıxış funksiyaları- stdio.H faylı
- •Sətirlərlə işləmək üçün funksiyalar- string.H, stdlib.H faylları
- •Mətn rejimində terminalla işləmək üçün funksiyalar- conio.H faylı
- •Xüsusi funksiyalar
- •Mündəricat
9.4.2. Oxumaq üçün faylın açılması
Əvvəlki bənddə yazmaq üçün faylın açılması haqqında bütün deyilənlər oxumaq üçün faylın açılması üçün də doğrudur. Əsas fərq ondan ibarətdir ki, open funksiyasını və ya onun konstruktorunu çağıran obyekt fstream obyektindən asılı olmayaraq istifadə olunur. Buna görə də açılan fayl artıq mövcud olmalıdır. Faylın yazmaq üçün açılmasından fərqli olaraq, oxumaq üçün faylı açmaq cəhdi, fayl olmadıqda onu yaratmayacaq.
Aşağıdakı operatorlarda oxumaq üçün faylın açılmasında ifstream obyektinin open funksiya –həddi istifadə olunub:
ifstream infile;
infile. open(“telebe . dat”);
Bu məqsədə fstream obyekti ilə də çatmaq olar:
fstream afile;
afile . open(“telebe.dat”,ios::in);
Aşağıdakı operatorda oxumaq üçün faylın açılmasında ifstream konstruktoru istifadə olunur:
ifstream infile (“telebe . dat”)
bunu aşağıdakı kimi də etmək olar:
fstream afile(“telebe . dat”, ios::in);
9.4.3. Faylın oxumaq və yazmaq üçün açılması
Bu məqsədlə fstream obyektindən istifadə etmək olar, ifstream və ya ofstream obyektlərindən isə istifadə etmək olmaz, çünki, ofstream obyekti faylın oxunması, ifstream obyekti isə fayla yazmaq üçün tətbiq oluna bilməz.
Aşağıdakı kod fraqmentində bu məqsədlə fstream obyektinin open funksiya – həddi istifadə olunmuşdur:
fstream afile;
afile . open (“telebe . dat”, ios::in)|ios::out);
hər iki halda bit üzrə operator və ya (|) istifadə olunmuşdur.
Qeyd edək ki, ios::in və ios::out flaqlarının birgə istifadəsi susmaya görə qiyməti dəyişir. ios::out flaqı öz – özlüyündə mövcud faylı yenidən yazır, ios::in flaqı isə gözləyir kı, fayl artıq mövcuddur. Lakin bu flaqlar birgə istifadə olunduqda faylın məzmunu saxlanılır və əgər fayl mövcud deyilsə, onda o, yaradılır.
Lakin open funksiya – həddi və ya konstruktorun olması hələ faylın müvəffəqiyyətlə açılması demək deyildir. Bunun bir neçə səbəbi var. Faylın oxumaq və yazmaq üçün açılması arasında əsas fərq ondan ibarətdir ki, hələlik mövcud olmayan faylı yazmaq istəyirik - əməliyyat sistemi avtomatik olaraq fayl yaradacaq, lakin mövcud olmayan fayldan oxumaq mümkün olmayacaq. Ona görə də fayldan oxumazdan əvvəl onun açılmasına tam əmin olmaq lazımdır.
Əgər fayl oxumaq üçün açıla bilmirsə, onda open funksiyasını çağıran ifstream obyektinin qiyməti NULL (qiyməti sıfra bərabər olan sabitdir) olur. Digər üsul isə ondan ibarətdir ki, əgər fayl oxumaq üçün açıla bilmirsə, funksiya – həddi doğru qiymət qaytarır. Bu isə o deməkdir ki, faylı açmaq mümkün olmadı.
Aşağıdakı proqramda faylın açılmasının hər iki üsulunun istifadəsi şərh olunur:
#include <fstream>
#include <iostream>
using namespase std;
int main ( )
{
ifstream infile;
infile . open (“telebe . dat”);
cout << “(infile) =” <<infile <<endl;
cout << “(infile . fail()) =”<< infile . fail() <<endl;
return 0;
}
Əgər telebe . dat faylı mövcud deyilsə, çıxış belə olur:
(infile)=00000000
(infile . fail( ))=1
Lakin əgər telebe.dat faylı proqram olan kataloqda yerləşirsə, onda çıxış belə olar:
(infile) = 0012FE40
(infile. fail( ))= 0
Qeyd edək ki, 0012FE40 qiyməti – infile dəyişəninin ifstream ünvanıdır və söz yox ki, proqramda başqa cür də ola bilər.
ifstream obyektindən fərqli olaraq, mövcud olmayan faylı açmaq istəyən ofstream obyekti NULL-a bərabər deyil və onun fail funksiya həddi yalan qiymət qaytarır. Ona görə də əməliyyat sistemi hələlik mövcud olmayan faylı açacaq. Buna baxmayaraq, yazmaq üçün faylın açılması həmişə uğurlu olmur. Məsələn, aşağıdakı proqramı buraxmazdan əvvəl, proqram yerləşən kataloqda telebe.dat faylı yaratmaq və onun xassələri daxilində “yalnız oxumaq üçün” qiymətini qurmaq lazımdır:
#include <fstream>
#include <iostream>
using namespase std;
int main ( )
{
ofstream outfile;
outfile . open (“telebe . dat”);
cout << “(outfile) =” <<outfile <<endl;
cout << “(outfile . fail()) =”<< outfile . fail() <<endl;
return 0;
}
