Wczytanie z pliku

0
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
	//Zmienne Do projektu
fstream plik;			//zmienna służąca do odczytu danych z pliku
string	text;			//Wskaźnik do lini tekstu wczytanej z pliku		
string	szukany;		//Szukana fraza
string	nazwa_pliku;	//nazwa pliku z ktorego czytamy tekst
bool zgodny =  false;

cout << "Podaj nazwe pliku do wczytania" << endl << '>' ;
cin	 >> nazwa_pliku;
plik.open(nazwa_pliku,ios::in);
if(!plik.good())
	cout << "Blad wczytania pliku, Zamykam program" << endl;
else
{
cout << "Jaka fraze chcesz znalesc?" << endl << '>' ;
cin >> szukany;
for(int p = 1;;p++)
{
getline(plik,text);
.....

to krótki zrzut programu który ma sprawdzać w której Lini pliku wystąpiła podana fraza. Program wykonuje się do momentu osiągnięcia ostatniej Lini. Googlowałem ,ale jakoś żadne rozwiązanie nie działa... Program wykonuje się zaś w tej lini następuje błąd przekroczenia zakresu zmiennej string i program się zawiesza. Jakieś pomysły??

0

Program wykonuje się do momentu osiągnięcia ostatniej Lini.
Ta jasne, na pewno nie! Wczytujesz nie wiadomo do kiedy, to sprawdzaj chociaż czy już jest ten koniec czy nie, bo w tym kodziem tego nie widzę.

0

Aż takim newbie nie jestem przed końcem pętli for mam if który znajduje eof i kiedy to nastąpi przerywa pętle;D pisałem że program zawiesza się przy tej instrukcji przy pierwszym jej wykonaniu...

0

Nie do końca napisałeś, w której linii. To w takim razie dziwne; jesteś pewien, że plik jest poprawny? Spróbuj inne operacje fstreamem zrobić i zobacz czy też się sypie.

0

Faktycznie;D Przez domniemanie uznałem ,że skoro kończę zrzut na tej lini to właśnie ona jest problematyczna... mój błąd... zaraz posprawdzam inne operacje jak widzisz jest sprawdzenie poprawności odczytania pliku (działa ,gdyż sprawdzałem) plik jest z rozszerzeniem .txt także nie powinien być problematyczny.

0

Strumień fstream otworzyłem poprawnie. Próba zapisu do pliku powiodła się. zmieniłem zewnętrzną pętlę for na while. Teraz program się wykonuje ale nie wchodzi do pętli tak jakby po otworzeniu pliku wskażnik odczytu znajdował się na jego końcu co wyjaśniało by wcześniejszy błąd... skoro warunek był po pierwszym wczytaniu próbowałem odczytac to co było za końcem pliku kompilator na to nie pozwolił. Lecz czy wskaźnik nie powinien być ustawiony na początku?? nie rozumiem

0

Nie wiem, czemu ci takie rzeczy się dzieją, zobacz ten kod, działa poprawnie:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
	fstream plik;
	string nazwa;
	string fraza;
	string linia;

	cin >> nazwa;

	plik.open(nazwa, ios::in);

	if (!plik.good())
		return 1;

	cin >> fraza;

	for (int i = 1; plik.good(); i++)
	{
		getline(plik, linia);
		if (linia == fraza)
			cout << i;
	}

	cin.ignore();
	cin.get();
}
0

A tak na przyszłość: istnieje coś takiego jak debugger, który pozwoli Ci stwierdzić nie tylko w którym miejscu program się wykrzacza, ale także m.in. podejrzeć zawartość zmiennych w momencie awarii. Możesz wtedy przejrzeć stan, znaleźć zmienną posiadającą inną wartość niż spodziewana i rozkminić (np. wykonując instrukcje krok po kroku) dlaczego jest tam co innego niż powinno, jeśli bezpośrednio z kodu to nie wynika.

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