Faylga ma’lumot yozish
Oddiy ma’lumot turiga ega qiymatlarni, massivlarni, satrlarni va ob’yektlarni faylga yozish uchun, ofstream sinfidan foydalanishimiz mumkin.
2.Faylning mavjud ekanligi qanday tekshiriladi?Faylning oxirini tekshirish qanday amalga oshiriladi?
Javobi:
2.Fayl mavjudligini tekshirish
Agar faylni o`qishda fayl mavjud bo`lmasa, dasturimiz ishga tushadi va noto`g`ri natija beradi. Xo`sh, bizning dasturimiz fayl bor yoki yo`qligini tekshira oladimi? Ha. Biz open funksiyasidan so`ng darxol fail( ) funksiyasini chaqirishimiz mumkin. Agar fail( ) funksiyasi true qiymat qaytarsa, u fayl mavjud emasligidan darak beradi.
1 // Faylni ochish
2 input.open("natijalar.txt");
3
4 if(input.fail())
5 {
6 cout << "File does not exist"<< endl;
7 cout << "Exit program"<< endl;
8
9 return 0;
10 }
Fayl so`ngini tekshirish
8.2-kodli ro`yxat ma’lumot faylidan ikki satrni o`qiydi. Agar biz faylda nechta satr borligini bilmasak va ularning barchasini o`qitishni istasak, fayl so`ngini qanday qilib aniqlaymiz?
O`tgan semestrda ko`rib chiqqanimiz, ushbu dasturni esga olamiz:
1 #include
2 #include
3 using namespace std;
4
5 int main()
6 {
7 // Faylni ochish
8 ifstream input("natija.txt");
9
10 double sum = 0;
11 double number;
12 while(!input.eof()) // Agar fayl so`ngi bo`lmasa davom ettirish
13 {
14 input >> number; // Ma’lumotni o`qish
15 cout << number << " "; // Ma’lumotni ko`rsatish
16 sum += number;
17 }
18
19 input.close();
20
21 cout << "\nSum = "<< sum << endl;
22
23 return 0;
24 }
Mazkur dasturda fayl so’ngini aniqlash uchun eof() funksiyasidan foydalanishimiz mumkin. Shunga qaramasdan, agar fayl so`ngida bitta qo`shimcha bo`sh joy mavjud bo`lsa ham dastur ishlamaydi. Buni tushunib olish uchun, keling, 8.3-rasmda keltirilgan fayldagi sonlarni qaraymiz. Bu faylda so`ngi sondan keyin bitta qo`shimcha bo`sh joy borligiga e’tibor qarating.
8.3-rasm. Fayl bo`sh joylar bilan ajratilgan sonlardan tashkil topgan.
Agar quyidagi kodni qo`llab barcha ma’lumotlarni o`qitsak va ularning barchasini qo`shsak, oxirgi son ikki marta qo`shiladi.
ifstream input("natija.txt");
doublesum = 0;
doublenumber;
while(!input.eof()) // Agar fayl so`ngi bo`lmasa davom ettirish
{
input >> number; // Ma’lumotni o`qish
cout << number << " "; // Ma’lumotni ko`rsatish
sum += number;
}
Bunga sabab, oxirgi son – 85.6 o`qilganda, fayl tizimi bu so`ngi son ekanligini bilmaydi, chunki, undan so`ng bitta bo`sh joy turibdi. Shundan kelib chiqan holda, eof() funksiyasi false ni qaytaradi. Dastur sonni qayta o`qiganda esa, eof() funksiyasi true qiymat qaytaradi, ammo number o`zgaruvchisi o`zgartirilmaydi, chunki hech narsa o`qilmaydi. number o`zgaruvchisi sum ga qayta qo`shilganda ham 85.6 ga teng bo`lib turaveradi.
Bu muammoni yechishning ikki xil yo`li bor. Birinchisi, eof() funksiyasining to`g`ri javob qaytarishini tekshirishdir. Agar u true qiymat qaytarsa, quyidagi kodda berilganidek, sikl to`xtatiladi:
ifstream input("natija.txt");
Do'stlaringiz bilan baham: |