C++ - zaczytanie ostatniej danej +1 i zapisanie w ostatnim wersie

0

Potrzebuję napisać programik który zaciągnie ostatni wers z notatnika doda do niego 1 wyrzuci informację jaka to liczba i zapisze ją do notatnika na ostatnią pozycję. Dotarłam do momentu jak niżej ale wyrzuca mi na momencie już samego zapisania czyli plik<<d<<endl; "error: no match for 'operator<<'. Nie wiem gdzie popełniłam błąd, nie rozumiem dlaczego nie odnajduje tego operatora. Bez konwersji danej na string program się odpala ale nie zapisuje danej do notatnika. Piszę w codeblock z włączonym c++ 17

Dokładnie to ma być tak że: Podaję w notatniku pierwszą liczbę czyli 99 i za każdym razem jak odpalę program to muszę mieć informację jaka teraz jest kolejna liczba (jak coś to ma być program który pokolei poda mi numery inwentaryzacyjne).

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <sstream>

using namespace std;

int main()
{
string linia;
fstream plik;
long a,b,c;
plik.open("plik.txt", ios::out | ios::app);
if(plik.good() == true)
{
plik>>a;
b=a+1;
cout<<b<<endl;
stringstream d;
d << b;
d.str().c_str();
plik<<d<<endl;
plik.close();
}else{
cout<<"ups";
plik.close();
}

system("PAUSE");
return(0);

}

1

A musisz to robić w C++ ?

  awk 'END {print $1 +1 }' plik.txt >> plik.txt

A błąd (pierwszy który znalazłem - dalej nie szukałem !) masz tu:

d.str().c_str();
plik<<d<<endl;

Zamień to np. na:

// d.str().c_str(); // niepotrzebne
plik<<d.str()<<endl;
1

O ile to jest ANSI plik to wystarczy:

#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;

int main()
{
	fstream file("plik.txt",ios::in|ios::out);
	if(file)
	{
		string line;
		streampos pos=0;
		while(file>>ws)
		{
			streampos tmp=file.tellg();
			if(!(file>>line)) break;
			pos=tmp;
		}
		stringstream ss(line);
		int x;
		ss>>x;
		file.clear();
		file.seekp(pos);
		file<<(x+1);
	}
	return 0;
}

0
_13th_Dragon napisał(a):

O ile to jest ANSI plik to wystarczy:

#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;

int main()
{
	fstream file("plik.txt",ios::in|ios::out);
	if(file)
	{
		string line;
		streampos pos=0;
		while(file>>ws)
		{
			streampos tmp=file.tellg();
			if(!(file>>line)) break;
			pos=tmp;
		}
		stringstream ss(line);
		int x;
		ss>>x;
		file.clear();
		file.seekp(pos);
		file<<(x+1);
	}
	return 0;
}

Działa perfekcyjnie! Dziękuje ci najmocniej poprawiłam na swoje żeby jeszcze był komunikat i jest gicior!

1 użytkowników online, w tym zalogowanych: 0, gości: 1