Skocz do zawartości

Pablo834

Użytkownicy
  • Postów

    2
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Pablo834

  1. Masz tutaj taki co napisałem: https://gmclan.org/up3937_3_CCalc.html Nie daje kodu tutaj bo to prawie 300 linii :jezor:, jest napisany w C i nawet działa. Najpierw parsuje linie poleceń i tworzy z niej drzewo :D a potem przerabia to drzewo na trochę inne drzewo zawierające już odpowiednie wskaźniki na funkcje operatorów i na koniec odpala funkcję getValue z głównej gałęzi :jezor:
  2. Żeby przeskakiwać o linijkę do przodu możesz zrobić sobie taką funkcje(nowsza wersja xD): void nextLine(ifstream& plik) { char c; do{ plik.read(&c, 1); } while(c != '\n'); //dopóki c nie jest końcem linii idź dalej } żeby przejść np. do 5 linii możesz zrobić: plik.seekg(0, ios_base::beg); //powrót do początku pliku for(int i =0; i < 5; i++) nextLine(plik); edit: Posiedziałem nad tym trochę i zrobiłem taką klasę: class FileReader { public: FileReader(const char* name) : file(name), line(0) { } template <typename T> void operator >>(T& v) { file >> v; } void move(int t) { if(line + t < 0) { line = 0; file.seekg(0, std::ios_base::beg); return; } line += t; if(t > 0) //jeśli jest większe niż zero to idziemy do przodu { for(; t > 0; t--) { char c; do{ file.read(&c, 1); } while(c != '\n'); } return; } if(t < 0) //jeśli jest mniejsze to idzemy do tyłu { for(; t > 0; t--) { while(file.peek() != '\n') { file.seekg(-1, std::ios_base::cur); } //cofamy do początku tej linii file.seekg(-1, std::ios_base::cur); //przeskakujemy znak końca linii while(file.peek() != '\n') { file.seekg(-1, std::ios_base::cur); } //cofamy się do początku poprzedniej linii file.seekg(1, std::ios_base::cur); //przeskakujemy znak końca linii } } } void goTo(unsigned int l) { move(l - line); //idzemy do tej linii line = l; } unsigned int getLine() { return line; } std::ifstream* getFile() { return &file; } private: unsigned int line; std::ifstream file; }; Nie sprawdzałem jej bo nie mam teraz kompilatora, ale powinna działać.
×
×
  • Dodaj nową pozycję...