Witam. Mam problem z programem. Pobieram z pliku dane (listę sąsiedztwa) po czym później chcę jej użyć do policzenia najkrótszej drogi algorytmem Dijkstry. Program piszę w C++ w programie Microsoft Visual C++ 2010 Express.
inline void pobierz_dane()
{
LPSTR Bufor2;
DWORD dwRozmiar, dwPrzeczyt;
HANDLE hPlik;
hPlik = CreateFile (NazwaPliku, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hPlik == INVALID_HANDLE_VALUE) {
MessageBox (NULL, "Nie można otworzyć pliku.", "A to pech!", MB_ICONEXCLAMATION);
PostQuitMessage (0); // Zakończ program
}
dwRozmiar = GetFileSize (hPlik, NULL);
if (dwRozmiar == 0xFFFFFFFF) {
MessageBox (NULL, "Nieprawidłowy rozmiar pliku!", "Niedobrze...", MB_ICONEXCLAMATION);
PostQuitMessage (0); // Zakończ program
}
Bufor2 = (LPSTR)GlobalAlloc(GPTR, dwRozmiar+1);
if(Bufor2 == NULL) {
MessageBox(NULL, "Za mało pamięci!", "Ale wiocha...", MB_ICONEXCLAMATION);
PostQuitMessage(0); // Zakończ program
}
if (!ReadFile (hPlik, Bufor, dwRozmiar, &dwPrzeczyt, NULL)) {
MessageBox (NULL, "Błąd czytania z pliku", "Dupa blada!", MB_ICONEXCLAMATION);
PostQuitMessage (0); // Zakończ program
}
Bufor2[dwRozmiar] = 0; // dodaj zero na końcu stringa
GlobalFree (Bufor); // Zwolnij bufor
CloseHandle (hPlik); // Zamknij plik
}
W ten sposób pobieram dane z pliku. Chcialem to zrobic normalnie fstreamem, ale w programie wyskakuje mi błąd : Identifier "ifstream" is undefined, pomimo że dołączam wszystkie biblioteki. Jednak w ten sposób wczytuję z pliku całość, a potrzebne mi są kolejne dane, które w pliku są oddzielane spacją. Jak mam zczytywać dane do białego znaku??
Plik przykładowo wygląda tak:
11
1 3 9 7
1 2 5 3
2 3 3 4
2 1 4 8
3 1 6 11
4 2 3 4
3 4 5 4
4 3 2 2
2 4 6 4
3 1 2 5
Do pracy z algorytmem potrzebuję poszczególne kolumny wczytywac do zmiennych, tzn 1 kolumna to 1 zmienna. Przy użyciu fstreama robilem pętle i i zczytywalem najpierw 1 wiersz a pozniej kolejne poprzez "plik>>x>>y>>k>>t;"
Nie wiem dlaczego nie mogę tego samego sposobu zastosować w MV C++ 2010 Express... Program z fstreamem robiłem w CodeBlocksie i wszystko było ok, z tym, że jeśli kopiuję ten kod do Codeblocksa to wyskakuje mi jakiś błąd: Undefined reference to "winmain" czy cos takiego.
Jak to rozwiązać? Szukałem długo w necie i jedyne co znalazłem to jakaś funkcja do znajdywania okreslonych liter, jednak przez przypadek zamknalem okno, a historia mi sie nie zapisuje i nie pamietam jej. Byla na literę "s" chyba...
Proszę o pomoc w rozwiązaniu problemu, bo nie wiem już zupełnie jak to zrobić...