gawan Napisano Styczeń 24, 2011 Zgłoś Share Napisano Styczeń 24, 2011 Witam ponownie. Mam pytanie dotyczące zapisu i odczytu pojedynczych znaków do pliku. Mianowicie napisałem programy służące do zapisu i odczytu (kożystają one z systemu wejścia/wyjścia C). Kod prezentuję poniżej: Zapis #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *fp; char ch; if(argc==1) { printf("Zapomniałeś podać nazwę pliku.\n"); exit(1); } if((fp = fopen(argv[1],"w"))==NULL) { printf("Nie można otworzyć pliku.\n"); exit(1); } do{ ch = getchar(); fputc(ch,fp); } while(ch != '.'); fclose(fp); return 0; } #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *fp; char ch; if(argc==1) { printf("Zapomniałeś podać nazwę pliku.\n"); exit(1); } if((fp = fopen(argv[1],"r"))==NULL) { printf("Nie można otworzyć pliku.\n"); exit(1); } ch = fgetc(fp); while(ch != EOF) { putchar(ch); ch = fgetc(fp); }; fclose(fp); return 0; } Problem polega na tym, że po uruchomieniu programu Zapis rzeczywiście we wskazanym pliku znajdują się znaki które chciałem w nim umieścić. Sprawdzałem to poleceniem cat. Natomiast po uruchomieniu programu Odczyt zawartość pliku jest niszczona. Czy ktoś może mi powiedzieć dlaczego tak się dzieje? Z tego co samemu udało mi się dowiedzieć w opisanej sytuacji nie powinno mieć takie coś miejsca. Edit: Pokombinowałem trochę i okoazało się, że jeżeli pozbęde się instrukcji while(ch != EOF) to zastosowane funkcje wyświetlą na ekaranie pojedynczy znak. Czy ktoś może wiem, dlaczego ww. pętla kasuje zawartość pliku? Ja chyba tego nie jestem w stanie ogarnąć. Link do komentarza Udostępnij na innych stronach More sharing options...
jozekkg Napisano Styczeń 25, 2011 Zgłoś Share Napisano Styczeń 25, 2011 while(ch != EOF) { putchar(ch); ch = fgetc(fp); }; Czy nie powinno być najpierw ch=getc(fp); a później ch=fgetc(fp); ? Nie znam c, ale tak na logikę najpierw czytasz z pliku a dopiero później wysyłasz na monitor. Przyjrzyj się tutaj: http://we.pb.edu.pl/~jforenc/2006_2007_01/PROG1-PWSIP-07.pdf Przykład 3. Może o to chodzi. Link do komentarza Udostępnij na innych stronach More sharing options...
gawan Napisano Styczeń 25, 2011 Autor Zgłoś Share Napisano Styczeń 25, 2011 To znaczy tak. Wymyśliłem już kod zastępczy (w sumie nie było za dużo do myślenia ^^), który grzecznie realizuje moje założenia. Ma on następująca postać: while(1) { if(ch == EOF) break; putchar(ch); ch = fgetc(fp); }; W tej chwili zastanawia mnie tylko co dzieje się w pierwszej wersji pętli. Jakby na to nie spojrzeć, zniszczenie zawartości pliku jest dosyć nieoczekiwanym rezultatem ^^ Link do komentarza Udostępnij na innych stronach More sharing options...
azra Napisano Luty 2, 2011 Zgłoś Share Napisano Luty 2, 2011 KOD0;) azrael@/Projekty/C_TEST/dist/Debug_C_99/MinGW-Windows $ ./c_test.exe in 4 a bb abs sfd ewr w wqeqweqweq eqweqwe 0;) azrael@/Projekty/C_TEST/dist/Debug_C_99/MinGW-Windows $ cat in 4 a bb abs sfd ewr w wqeqweqweq eqweqwe U mnie pliku nie niszczy. Jesteś pewny, że kompilowałeś i uruchamiałeś dokładnie ten kod? Link do komentarza Udostępnij na innych stronach More sharing options...
gawan Napisano Luty 6, 2011 Autor Zgłoś Share Napisano Luty 6, 2011 Naturalnie. Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.