Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- #include<string>
- /*
- Получите несколько значений от пользователя и запишите их в файл.
- Добавьте их к уже записанным там данным (при их наличии). При окончании пользователем ввода прочитайте файл и выведите на эк- ран все значения.
- */
- std::fstream file;
- class Distance
- {
- private:
- int feet;
- float inches;
- public:
- Distance() : feet(0), inches(0.0F) {}
- Distance(float fitfeet)
- {
- feet = static_cast<int>(fitfeet);
- inches = 12 * (fitfeet - feet);
- }
- Distance(int feetTemp, float inchesTemp)
- {
- feet = feetTemp;
- inches = inchesTemp;
- }
- Distance(Distance& tmp)
- {
- *this = tmp;
- }
- friend Distance operator + (const Distance&, const Distance&);
- friend std::ostream& operator << (std::ostream&, Distance&);
- int CheckFeet(std::string tmp);
- void setDistance();
- };
- int Distance::CheckFeet(std::string tmp)
- {
- int strlen = tmp.size();
- if (strlen == 0 || strlen > 5)
- {
- return 0;
- }
- for (int i(0); i < strlen; i++)
- {
- if ((tmp[i] <= '0' || tmp[i] >= '9') && tmp[i] != '-')
- {
- return 0;
- }
- }
- double n = atof(tmp.c_str());
- if (n <-999.0 || n > 999.0)
- {
- return 0;
- }
- return 1;
- }
- void Distance::setDistance()
- {
- std::string tmp;
- std::cin.unsetf(std::ios::failbit);
- while (true)
- {
- std::cout << "Enter feet of distance : ";
- std::cin >> tmp;
- if (CheckFeet(tmp)==0)
- {
- std::cout << "Uncorrect feets, pls enter new!" << std::endl;
- std::cin.clear(std::ios::failbit);
- }
- else
- {
- std::cin.ignore(10, '\n');
- feet = std::atoi(tmp.c_str());
- break;
- }
- std::cin.clear();
- std::cin.ignore(10, '\n');
- }
- while (true)
- {
- std::cout << "Enter inches of distance : ";
- std::cin >> inches;
- if (inches<0 || inches>11.99)
- {
- std::cout << "Uncorrect inches, pls enter new!" << std::endl;
- std::cin.clear(std::ios::failbit);
- }
- else if (std::cin.good())
- {
- std::cin.ignore(10, '\n');
- break;
- }
- std::cin.clear();
- std::cin.ignore(10, '\n');
- }
- }
- Distance operator + (const Distance& dd1, const Distance& dd2)
- {
- int f = dd1.feet + dd2.feet;
- float i = dd1.inches + dd2.inches;
- if (i >= 12.0)
- {
- i -= 12.0;
- f++;
- }
- return Distance(f, i);
- }
- std::ostream& operator << (std::ostream& s, Distance& tmp)
- {
- s << "\'" << tmp.feet << "\-'" << tmp.inches;
- return s;
- }
- int main()
- {
- Distance tmp;
- char ch('y');
- file.open("dist.txt", std::fstream::app | std::fstream::out |
- std::fstream::in );
- do
- {
- tmp.setDistance();
- file.write(reinterpret_cast<char*>(&tmp), sizeof(tmp));
- std::cout << "Retry? y\\n : ";
- std::cin >> ch;
- } while (ch != 'n');
- file.seekg(0);
- file.read(reinterpret_cast<char*>(&tmp), sizeof(tmp));
- while (!file.eof())
- {
- std::cout << tmp << std::endl;
- file.read(reinterpret_cast<char*>(&tmp), sizeof(tmp));
- }
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement