ikar_ Napisano Kwiecień 20, 2008 Zgłoś Share Napisano Kwiecień 20, 2008 Witam Napisałem prosty kod w C. Niestety program wysypuje się przy próbie zapisu danych do pliku tekstowego, a ja nie wiem dlaczego tak się dzieje.... dlatego zwracam się do was o pomoc Czy ktoś mógłby wytłumaczyć mi w czym tkwi problem i jak go rozwiązać/ ew. poprawic istniejacy kod ? W dodatku przy wczytywaniu nr albumu program podaje jakieś kosmiczne dane, tzn nie wyświetla wprowadzonego nr. a zupełnie inny ciąg cyfr Czy to może dla tego, że nie czyszczę bufora?? ehh... po małych modyfikacjach przestał również otwierać i wczytywać dane z istniejącego już pliku... KOD #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { FILE *whatever; char plik[15]; char imie[21]; char nazwisko[31]; int album[10]; printf("\nPodaj nazwe pliku: "); gets(plik); if((whatever=fopen(plik,"txt,r"))!=NULL) { fscanf(whatever,"%s %s \n%d",&imie, &nazwisko, &album); printf(whatever,"%s %s \n%d", imie, nazwisko, album); //fprintf(whatever,"%s %s \n\t\t %d", imie, nazwisko, album); /* zostawiajac tylko ta instr. programpowinien wczytywac dane bezposr z pliku z pom bufora.. ?? wolalbym aby tak wlasnie robil*/ fclose(whatever); } else { whatever=fopen(plik,"txt,w"); printf("\nPodaj Imie i Nazwisko: "); scanf("%s %s", &imie, &nazwisko); printf("\nPodaj Nr. albumu: "); scanf("%d", &album); printf("\n\n\tWprowadziles: Imie: %s \n\t\t\tNazwisko: %s \n\t\t\tAlbum: %d", imie,nazwisko,album); fprintf(whatever,"%s %s %d", imie, nazwisko, album); fclose(whatever); } system("PAUSE"); return 0; } Ogólnie program miał po wpisaniu nazwy pliku: 1. jeśli plik zewnętrzny istnieje - wczytać dane i wyświetlić je na ekranie, 2. jesli nie istnieje, utworzyć plik i zapisać w nim podane dane.... Ktoś wie dlaczego tak się dziej? Ja tymczasem biegnę już na jakąś górę, by moc z niej dziękować Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Kwiecień 20, 2008 Zgłoś Share Napisano Kwiecień 20, 2008 A kiedy się wysypuje? w której linijce? Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Kwiecień 20, 2008 Zgłoś Share Napisano Kwiecień 20, 2008 Prosze przeczytac regulamin albo Thread.Die() Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
ikar_ Napisano Kwiecień 20, 2008 Autor Zgłoś Share Napisano Kwiecień 20, 2008 A kiedy się wysypuje? w której linijce? wysypuje się gdy ma wykonać instrukcję(żółta strzałka przechodzi do tej linijki): KODfprintf(whatever,"%s %s %d", imie, nazwisko, album); w jaki sposób naruszyłem regulamin forum, bo nie bardzo rozumiem...?? Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Kwiecień 20, 2008 Zgłoś Share Napisano Kwiecień 20, 2008 CYTAT(ikar_ @ nie, 20 kwi 2008 - 17:47) Napisałem prosty kod w C. Niestety program wysypuje się przy próbie zapisu danych do pliku tekstowego, a ja nie wiem dlaczego tak się dzieje.... dlatego zwracam się do was o pomoc to wina tych funkcji: 1. fprintf(whatever,"%s %s %d", imie, nazwisko, album); 2. fscanf(whatever,"%s %s \n%d",&imie, &nazwisko, &album); należy je zastąpić następującymi: 1. fwrite(&imie,sizeof(imie),1,whatever); 2. fread(&imie,sizeof(imie),1,whatever); W dodatku przy wczytywaniu nr albumu program podaje jakieś kosmiczne dane, tzn nie wyświetla wprowadzonego nr. a zupełnie inny ciąg cyfr to dlatego, ze użyłeś tablicy (int album[10], a traktowałeś ją jak pojedńczą zmienną, powinno być: int album; KOD #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { FILE *whatever; char plik[15]; char imie[21]; char nazwisko[31]; int album; printf("\nPodaj nazwe pliku: "); gets(plik); if((whatever=fopen(plik,"r"))!=NULL) { fread(&imie,sizeof(imie),1,whatever); fread(&nazwisko,sizeof(nazwisko),1,whatever); fread(&album,sizeof(album),1,whatever); printf("\nImie: %s",imie); printf("\nNazwisko: %s",nazwisko); printf("\nNumer telefonu: %d\n",album); fclose(whatever); } else { whatever=fopen(plik,"w"); printf("\nPodaj Imie i Nazwisko: "); scanf("%s %s", &imie, &nazwisko); printf("\nPodaj Nr. albumu: "); scanf("%d", &album); printf("\n\n\tWprowadziles: Imie: %s \n\t\t\tNazwisko: %s \n\t\t\tAlbum: %d", imie,nazwisko,album); fwrite(&imie,sizeof(imie),1,whatever); fwrite(&nazwisko,sizeof(nazwisko),1,whatever); fwrite(&album,sizeof(album),1,whatever); fclose(whatever); } system("PAUSE"); return 0; } Pozdrawiam! Link do komentarza Udostępnij na innych stronach More sharing options...
sazian Napisano Kwiecień 20, 2008 Zgłoś Share Napisano Kwiecień 20, 2008 Zasady pisania na forum(programowanie) http://forum.unit1.pl/index.php?showtopic=19 Link do komentarza Udostępnij na innych stronach More sharing options...
ikar_ Napisano Kwiecień 20, 2008 Autor Zgłoś Share Napisano Kwiecień 20, 2008 Wielkie dzięki za pomoc xevil21 Na zajęciach nie używaliśmy takich funkcji jak: KOD fread fwrite prawdę mówiąc to pierwszy raz je widzę, ale już poczytałem o nich na http://pl.wikibooks.org nie do końca tylko zrozumiałem o co chodzi z tym sizeof.... gdybyś mógł mi jakoś prościej wytłumaczyć jaką on tutaj role spełnia...? Jeśli chodzi o ten regulamin.... chciałem zmienić znaczniki z na [cpp][/cpp] (bo o to chyba chodziło) ale był jakiś problem i zmiany nie chciały się załadować.... Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Kwiecień 21, 2008 Zgłoś Share Napisano Kwiecień 21, 2008 sizeof(coś) daje długość cosia w bajtach, a jet tu potrzebne bo te funkcje dostaję wskaźnik do obszaru to trzeba im powiedzieć ile tego obszaru od tego miejsca mają wziąść Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
ikar_ Napisano Kwiecień 21, 2008 Autor Zgłoś Share Napisano Kwiecień 21, 2008 na końcu programu dodałem jeszcze fragment kodu i chciałem go zapętlić, ale moje próby nie dawały oczekiwanych rezultatów KOD printf("\n\n\t\t\tODCZYT DANYCH\n\n\n"); printf("\nPodaj nazwe pliku do odczytu: \n"); gets(plik); if((whatever=fopen(plik,"r"))!=NULL) { fread(&imie,sizeof(imie),1,whatever); fread(&nazwisko,sizeof(nazwisko),1,whatever); fread(&album,sizeof(album),1,whatever); printf("\n\tImie: %s",imie); printf("\n\tNazwisko: %s",nazwisko); printf("\n\tNumer albumu: %d\n\n",album); fclose(whatever); } else{ printf("\nPlik nie istnieje"); } używałem pętli "do...while..." ale nieodpowiednio definiowałem warunek, bo gdy podawałem istniejącą nazw pliku to program wyświetlał jego zawartość, a następnie prosił o ponowne podanie nazwy... i tak w kółko :/ a przy nieistniejącej się zamykał... amiało być odwrotnie przy pętli for, właściwie nie wiem jak jej tu użyć bo moje wszelkie próby konczą sie na komunikacie "wcisnij dowlny klawisz.." Jak mogę wykorzystać do tego zwracaną wartość instr. for? Wiem, że gdy otwiera plik to zwraca 1, gdy sie to nie uda zwraca 0. oczywiscie stworzyłem dodatkową zmienna int Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Kwiecień 21, 2008 Zgłoś Share Napisano Kwiecień 21, 2008 to zanageuj warunek Baza tysięcy lotnisk: http://airportsbase.com 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.