[C++]Usuwanie ostatniego znaku z pliku


(Kamil Kocurek) #1

Witam, napisałem prosty edytor tekstowy w c++, Ale nie wiem jak dodać obsługę dla backspace. Proszę tylko o usuwanie ostatniego znaku z pliku, oto kod:

main.cpp:

#include "lib.h"


int main(int argc, char** argv) {

	ofstream fin("plik", ios::app); //Otwieranie pliku "plik"

	int stary = getch(); //Deklaracja i nadanie wartosci zmiennej "stary" (Do przechowywania informacji o nacisniętym klawiszu)

	for(;;) //nieskończona pętla for

	{	

										//sprawdzanie jaki klawisz nacisnięto, wyswietlenie go i przesłanie do pliku(początek)

		if(stary == 8)/*BACKSPACE*/{

			//Tu instrukcje dla backspace

		}

		if(stary == 13)/*ENTER*/{

		fin << endl;

		cout << endl;

		}

		if(stary == 27)/*ESC*/{

		return 0;

		}

		if(stary == 32)/*SPACE*/{

		fin << " ";

		cout << " ";

		}

		if(stary == 33){

		fin << "!";

		cout << "!";

		}

		if(stary == 44){

		fin << ",";

		cout << ",";

		}

		if(stary == 46){

		fin << ".";

		cout << ".";

		}

		if(stary == 48){

		fin << "0";

		cout << "0";

		}

		if(stary == 49){

		fin << "1";

		cout << "1";

		}

		if(stary == 50){

		fin << "2";

		cout << "2";

		}

		if(stary == 51){

		fin << "3";

		cout << "3";

		}

		if(stary == 52){

		fin << "4";

		cout << "4";

		}

		if(stary == 53){

		fin << "5";

		cout << "5";

		}

		if(stary == 54){

		fin << "6";

		cout << "6";

		}

		if(stary == 55){

		fin << "7";

		cout << "7";

		}

		if(stary == 56){

		fin << "8";

		cout << "8";

		}

		if(stary == 57){

		fin << "9";

		cout << "9";

		}

		if(stary == 63){

		fin << "?";

		cout << "?";

		}

		if(stary == 97){

		fin << "a";

		cout << "a";

		}

		if(stary == 98){

		fin << "b";

		cout << "b";

		}

		if(stary == 99){

		fin << "c";

		cout << "c";

		}

		if(stary == 100){

		fin << "d";

		cout << "d";

		}

		if(stary == 101){

		fin << "e";

		cout << "e";

		}

		if(stary == 102){

		fin << "f";

		cout << "f";

		}

		if(stary == 103){

		fin << "g";

		cout << "g";

		}

		if(stary == 104){

		fin << "h";

		cout << "h";

		}

		if(stary == 105){

		fin << "i";

		cout << "i";

		}

		if(stary == 106){

		fin << "j";

		cout << "j";

		}

		if(stary == 107){

		fin << "k";

		cout << "k";

		}

		if(stary == 108){

		fin << "l";

		cout << "l";

		}

		if(stary == 109){

		fin << "m";

		cout << "m";

		}

		if(stary == 110){

		fin << "n";

		cout << "n";

		}

		if(stary == 111){

		fin << "o";

		cout << "o";

		}

		if(stary == 112){

		fin << "p";

		cout << "p";

		}

		if(stary == 113){

		fin << "q";

		cout << "q";

		}

		if(stary == 114){

		fin << "r";

		cout << "r";

		}

		if(stary == 115){

		fin << "s";

		cout << "s";

		}

		if(stary == 116){

		fin << "t";

		cout << "t";

		}

		if(stary == 117){

		fin << "u";

		cout << "u";

		}

		if(stary == 118){

		fin << "v";

		cout << "v";

		}

		if(stary == 119){

		fin << "w";

		cout << "w";

		}

		if(stary == 120){

		fin << "x";

		cout << "x";

		}

		if(stary == 121){

		fin << "y";

		cout << "y";

		}

		if(stary == 122){

		fin << "z";

		cout << "z";

		}

		stary = getch(); //Nadanie nowej wartosci dla "stary"

										//sprawdzanie jaki klawisz nacisnięto, wyswietlenie go i przesłanie do pliku(koniec)

	}

}

lib.h:

#include 

#include 

#include 

#include 

#include 


using namespace std;

Ps. Wiem że na razie nie wyświetla poprzednio zapisanych danych ale zajmę się tym gdy rozwiążę sprawę backspace, sorry za brak "ś" w kodzie ale IDE mi na to nie pozwala :wink:


(kostek135) #2

O stary aleś się naklepał… podziwiam, że nawet nie zadałeś sobie trudu żeby ominąć to pętlą + tablicą, czy coś…

  1. Wiesz, że możesz rzutować char na int i odwrotnie, a tym samym skrócić ten kod o jakieś 4/5?

Małe preview

#include 


int main () {

	int x = 97;


	std::cout << (char) x;


	return 0;

}
  1. Nikt nie robi tego w ten sposób. Edytor do czasu kliknięcia Save, przechowuje modyfikacje w RAM. Jest szybciej, nie zapisujesz po literce, znika problem usuwania. W tym momencie aby usunac znak z końca musisz przejrzeć cały plik i przepisać go, z pominięciem ostatniego znaku. Mając to w RAM, możesz usunąć ostatni znak, np. tak

    string buffor; // zakładamy, że tu jest cały nasz tekst

    buffor.pop_back();


(Kamil Kocurek) #3

Przyznam że lubię utrudniać sobie trochę zadania, nie żebym był masochistą ale chcę poćwiczyć przy okazji nie tworząc nowego zadania dla siebie :smiley: A jeżeli chodzi o twój kod to przyznaję że po prostu centralnie zapomniałem o istnieniu funkcji pop_back() :? , Wielkie thx :smiley: .


(kostek135) #4

Emm… mam nadzieję, że to był sarkazm…


(Kamil Kocurek) #5

Nie, nie był bo nie piszę programu do użytku, to swoista zabawa :wink: .