Dzień dobry,
W moim programie, który wczytuje dane z pliku i pracuje na grafie sprzężonym pojawił się problem- w funkcji main otwieram plik, aby policzyć ilość linii (jest ona równoznaczna z ilością wierzchołków), potem plik zamykam i otwierany jest on ponownie w funkcji odpowiedzialnej za zczytywanie danych do tablicy. Co ciekawe, problem zaczyna się, gdy liczba wierzchołków >5.
Oto istotne fragmenty kodu (w załączniku całość):
int main()
{
string nazwa;
string zawartosc;
int licznik=0;
//cout<< "Podaj nazwe pliku zawierajacego dane, lacznie z rozszerzeniem:"<<endl;
//cin>> nazwa;
nazwa="graf_dane.txt";
plik.open(nazwa.c_str());
if( plik.good() != true )
{
cout << "Otworzenie pliku jest niemozliwe!" <<endl;
}
else
{
cout << "Otwieranie pliku zakonczone powodzeniem!" << endl;
while(getline(plik, zawartosc)) //liczymy ilosc linii=ilosc krawedzi
{
licznik++;
}
plik.close();
Graf nasz(licznik, nazwa);
(...)
}
return 0;
}
void zczytaj() //zczytanie grafu z pliku
{
int a;
cout<<"sprawdzam1"<<endl;
plik.open(dane.c_str()); //PROBLEM!
cout<<"sprawdzam2"<<endl;
for (int i=0; i<=wierzcholki-1; i++)
{
for (int j=0; j<=wierzcholki-1; j++)
{
plik>> macierz[i][j];
if (macierz[i][j]==1)
krawedzie++;
}
}
plik.close();
for (int p=0; p<=wierzcholki-1; p++) //wypisanie grafu na ekran
{
for (int q=0; q<=wierzcholki-1; q++)
cout<<macierz[p][q];
cout<<endl;
}
cout<<"liczba krawedzi "<<krawedzie<<endl;
}
Zmienne dane i nazwa przechowują nazwę pliku z danymi podaną przez użytkownika.
I tak: w przypadku więcej niż 5 wierzchołków, w funkcji zczytaj wypisywany jest komunikat "sprawdzam1", a "sprawdzam2" już nie.
Jeżeli w main zakomentuję linijkę z while(getline(plik,zawartosc)) wszystko działa bez problemu (ale nie uzyskuję informacji ile linijek ma plik).
Z czego może wynikać ów problem?
Z góry dziękuję za pomoc