Cześć :)
Potrzebna mi pomoc, napisałem program który powinien odczytać plik wykonać odejmowanie na dwóch zmiennych i zapisać pliki z powrotem, następnie mam możliwość wybrania następnego pliku i to samo zadanie niestety coś idzie źle. Wygląda to tak jak by wczytał plik zrobił obliczenia ale nie zamknął i nie zapisał wcześniej otworzonego pliku.
Kod wygląda tak:
#include <iostream>
#include <unistd.h>
#include <fstream>
#include <sstream>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
using namespace std;
int hash;
fstream plik;
stringstream ss;
string temp_nazwa_pliku;
int main()
{
for(;;)
{
cout << "podaj nazwe pliku" << endl;
cin >> hash;
string k_imie, k_rasa;
int kg, dawki;
int kg2, dawki2;
ss << hash;
ss >> temp_nazwa_pliku;
const char * nazwa_pliku = temp_nazwa_pliku.c_str();
plik.open(nazwa_pliku, ios::in | ios::out);
if(plik.good()==false)
{
cout << "Brak Pliku" << endl;
}
string linia;
int nr_linii = 1;
while(getline(plik,linia))
{
switch(nr_linii)
{
case 1:
break;
case 2:
k_imie = linia;
break;
case 3:
k_rasa = linia;
break;
case 4:
kg = atoi(linia.c_str());
break;
case 5:
dawki = atoi(linia.c_str());
break;
}
nr_linii++;
}
cout << k_imie << endl;
cout << k_rasa << endl;
cout << kg << endl;
cout << dawki << endl;
if (dawki < 1)
{
cout << "Dawki sie skonczyly" << endl;
plik.close();
plik.clear();
}
else
{
kg2 = kg - 2;
dawki2 = dawki - 1;
plik << hash << endl;
plik << k_imie << endl;
plik << k_rasa << endl;
plik << kg2 << endl;
plik << dawki2 << endl;
cout << "Zapisuje: "<< hash << endl;
cout << k_imie << endl;
cout << k_rasa << endl;
cout << kg2 << endl;
cout << dawki2 << endl;
plik.close();
plik.clear();
}
}
return 0;
}
Pliki wyglądają w taki sposób:

I tak jak pisałem program wczytuje wybrany plik odejmuje prawidłowo i jak chcę wykonać jeszcze raz tą samom operacje na tym samym pliku to wczytane wartości nie są pomniejszone o ostatnią operacje ale wczytuje wartość początkową tych wartości. Gdy wczytuje drugi plik to program tak jak by mnie olewa i dalej wyświetla wartości z pliku który wczytałem jako pierwszy.
Rad bym był przeczytać rozwiązanie mojego problemu. Jeżeli podałem za mało informacji albo opisałem je zbyt zawile to obiecuje w miarę szybko odpowiedzieć na dodatkowe pytania :)
Pozdrawiam Kacperos_89