// 1) bo '\n' jest strumieniu po cin>> cin.ignore() przed getline.
// 2) moE<e == zamiast = pomoE<e.
// 3) może zapisać do stringu;
// 4)
/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <iostream>
#include <fstream>
#include <assert.h>
using namespace std;
struct ksiazka
{
string tytul{};
static int ileKsiazek;
};
std::istream &operator>>(std::istream &is, ksiazka &obj)
{
if (!(is >> obj.tytul) || obj.tytul == "exit")
is.setstate(std::ios::failbit);
return is;
}
void zapiszDoPlikuLiczbaKsiazek(std::string nazwaPliku);
int
ksiazka::ileKsiazek = 0;
int main()
{
// char readl[100]{};
ifstream fin("książki.txt", ios::binary | ios::in);
if (fin.good())
{
// fin.read((char *)readl, 32);
fin.read((char *)(&(ksiazka::ileKsiazek)),
sizeof(ksiazka::ileKsiazek));
fin.close();
}
else
{
ofstream fout("książki.txt");
if (fout.good())
{
fout << std::string(sizeof(ksiazka::ileKsiazek), '.') << "\n";
fout.close();
}
else
return -1;
zapiszDoPlikuLiczbaKsiazek("książki.txt");
}
{
constexpr size_t n = 100;
ksiazka baza[n] = {};
for (size_t liczba_ksiazek = 0; liczba_ksiazek < n; liczba_ksiazek++, ksiazka::ileKsiazek++)
// for (;; ksiazka::ileKsiazek++)
{
ksiazka & temp=baza[liczba_ksiazek];
// ksiazka temp{};
if (!((cin >> temp) || temp.tytul == "" /*||temp.autor||temp.data */))
break;
fstream plik;
plik.open("książki.txt", ios::out | ios::app);
if (plik.good())
{
plik << "Dane " << ksiazka::ileKsiazek + 1 << " książki:" << std::endl;
plik << "Tytuł: " << temp.tytul << std::endl;
// plik<<"Autor: "<<temp.autor<<std::endl;
// plik<<"Data powstania: "temp.data<<endl<<std::endl;
plik.close();
}
else
break;
}
}
zapiszDoPlikuLiczbaKsiazek("książki.txt");
std::cout << ksiazka::ileKsiazek << std::endl;
return 0;
}
void zapiszDoPlikuLiczbaKsiazek(std::string nazwaPliku)
{
ofstream fout(nazwaPliku, ios::binary | ios::out | ios::in);
if (fout.good())
{
fout.write(reinterpret_cast<char *>(&(ksiazka::ileKsiazek)), sizeof(ksiazka::ileKsiazek));
fout.close();
}
}