Jaklub Opublikowano 21 Grudnia 2008 Udostępnij Opublikowano 21 Grudnia 2008 Wiecie może, czemu gdy próbuję wczytać plik za pomocą fopen, zawsze wychodzi null nawet wtedy, gdy próbuję coś zapisać do pliku (a plik jest w katalogu)? Nie jestem zbyt dobry w C, więc pytam (na razie to mój jedyny problem, a google i i wikibooks jakoś nie pomaga, chyba że jakimś cudem coś przeoczyłem). Z góry dzięki. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 21 Grudnia 2008 Udostępnij Opublikowano 21 Grudnia 2008 FILE* pFile; pFile=fopen ("plik.txt","r"); if(pFile!=NULL) { // odczyt danych fclose(pFile); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 21 Grudnia 2008 Autor Udostępnij Opublikowano 21 Grudnia 2008 PsichiX: Właśnie to mi nie działa. Czemu - nie mam zielonego pojęcia (podczas gdy dokładnie to samo w innych projektach działa dobrze). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 21 Grudnia 2008 Udostępnij Opublikowano 21 Grudnia 2008 Pokaz mi ten kod ladujacy i kiedy go uzywasz, to sie sprawdzi co nie tak PS. moze wywalac NULL jesli plik nie istnieje. upewnij sie ze sciezka jest prawidlowa Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 21 Grudnia 2008 Autor Udostępnij Opublikowano 21 Grudnia 2008 PS. moze wywalac NULL jesli plik nie istnieje. upewnij sie ze sciezka jest prawidlowa Nawet kiedy próbuję zapisać do pliku za pomocą file=fopen("plik.txt","w"); ? Ze względu na to, że aplikacja nie robi nic przy odczytywaniu, ale zacina się przy zapisywaniu, kod na zapisywanie: FILE * pFile; pFile = fopen ( "save.sav" , "w" ); fprintf (pFile, "%d/n%d/n%d/n%d",lives,score,levelid,yoshisat); fclose (pFile); Nieużywany w pętlach. Na pewno fprintf nie jest winne, ponieważ po jego skasowaniu kod wciąż nie działa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 21 Grudnia 2008 Udostępnij Opublikowano 21 Grudnia 2008 Ja Ci proponuje zrezygnowac z zapisu znakowego, a uzyc binarnego: FILE * pFile; pFile = fopen ( "save.sav" , "wb" ); fwrite(&lives,sizeof(double),1,pFile); fwrite(&score,sizeof(double),1,pFile); fwrite(&levelid,sizeof(double),1,pFile); fwrite(&yoshisat,sizeof(double),1,pFile); fclose (pFile); A potem odczyt tego: FILE * pFile; pFile = fopen ( "save.sav" , "rb+" ); if(pFile!=NULL) { fread(&lives,sizeof(double),1,pFile); fread(&score,sizeof(double),1,pFile); fread(&levelid,sizeof(double),1,pFile); fread(&yoshisat,sizeof(double),1,pFile); fclose(pFile); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 21 Grudnia 2008 Autor Udostępnij Opublikowano 21 Grudnia 2008 Użyłem tego kodu zapisywania i oczywiście się zacięło. Jest jakaś alternatywa do obsługi plików? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 21 Grudnia 2008 Udostępnij Opublikowano 21 Grudnia 2008 fstream sa jeszcze, orazfunkcje obslugi plikow w WINAPI Edit: Zapodaj mi na PW plik cpp to sprawdze, bo to musi byc cos ze zmiennymi (i zapewne ograniczeniem zasiegu zmiennej) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 21 Grudnia 2008 Udostępnij Opublikowano 21 Grudnia 2008 Chciałbym zauważyć że w C nie ma C++owego fstream :) A jeszcze bardziej brakuje plików cpp ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 21 Grudnia 2008 Udostępnij Opublikowano 21 Grudnia 2008 @UP: Fakt xD Ale tak czy inaczej, zagladajac w kod ktory podeslal zauwazylem brak gdziekolwiek indziej w kodzie zmiennych ktore chce zapisac. Ciekaw jestem jakiego IDE i kompilatora uzywa. Poprawka: juz wiem i przyznam ze zle ich szukalem xD Tyle ze tam te zmienne sa typu int a On chcial je odczytywac jako double. po prostu w kodzie zapisu i odczytu tam gdzie masz sizeof(double) zamien na sizeof(int) i pomoze :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 21 Grudnia 2008 Autor Udostępnij Opublikowano 21 Grudnia 2008 Wciąż się zacina. :[ Chyba spróbuję wygooglować jakąś jeszcze inną metodę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 21 Grudnia 2008 Udostępnij Opublikowano 21 Grudnia 2008 Czy możesz otworzyć jakikolwiek plik, który istnieje? Dzieje się tak dla każdego pliku? Czy próbujesz otwierać podając całą ścieżkę? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 21 Grudnia 2008 Autor Udostępnij Opublikowano 21 Grudnia 2008 Czy możesz otworzyć jakikolwiek plik, który istnieje? Dzieje się tak dla każdego pliku? Czy próbujesz otwierać podając całą ścieżkę? Zawsze nic nie odczytuje, a jeśli coś próbuję zapisać, program się zacina. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 21 Grudnia 2008 Udostępnij Opublikowano 21 Grudnia 2008 Jakie IDE? Co mówi Debugger? Prześlij projekt lub większy fragment pliku.. Jeśli w innych projektach działa trzeba przestudiować debuggerem Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 24 Grudnia 2008 Autor Udostępnij Opublikowano 24 Grudnia 2008 Jakie IDE? Co mówi Debugger? Prześlij projekt lub większy fragment pliku.. Jeśli w innych projektach działa trzeba przestudiować debuggerem IDE: Dev-C++ Użycie debuggera jest chyba niemożliwe (projekt pod inną platformę). Spróbowałem inaczej poradzić sobie z problemem: za pomocą errno, ale program zawsze zwraca 0, a skrypt nie działa. Jaka może być tego przyczyna? Kod podam za chwilę. edit: int load() { FILE *f = fopen("save.sav", "r"); if (f==NULL) { oslStartDrawing(); oslSetTextColor(RGBA(255,255,255,255)); oslSetBkColor(RGBA(0,0,0,0)); oslPrintf_xy(0,20,"error %i",errno); oslSyncFrame(); oslEndDrawing(); } else { oslStartDrawing(); oslSetTextColor(RGBA(255,255,255,255)); oslSetBkColor(RGBA(0,0,0,0)); oslPrintf_xy(0,20,"yase"); oslSyncFrame(); oslEndDrawing(); fclose(f); } while(1) { oslReadKeys(); if (osl_keys->pressed.cross) { mainmenu(); } } } w include jest errno.h i parę innych plików Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się