michu Napisano Grudzień 8, 2006 Zgłoś Share Napisano Grudzień 8, 2006 Witam, jestem początkujący więc proszę o wyrozumiałość i cierpliwość oto fragment zawartości pliku tym.txtDOKUMENT#KLIENT#DATA#WARTOSC04A02035#ŻYWIEC-ZDRÓJ#01.03.2005#849,12004A02034#ŻYWIEC-ZDRÓJ#01.03.2005#7 563,88004A02031#ŻYWIEC-ZDRÓJ#01.03.2005#2 830,40004A02033#ŻYWIEC-ZDRÓJ#01.03.2005#5 943,84004A02032#ŻYWIEC-ZDRÓJ#01.03.2005#6 929,60004D30756#WOJSZNIS P.#01.03.2005#-17,04004C00632#KRUK N.#01.03.2005#1 080,00004D20751#SAJGON#01.03.2005#307,44004D50789#ŚWIĘCICKI#01.03.2005#-29,72004C00630#CIROCKI#01.03.2005#35,00004C00631#CIEMNY#01.03.2005#10,00004H00836#CIEMNY#01.03.2005#225,92004C00629#SYGNARSKI#01.03.2005#25,000......Program musi odczytać z tego pliku wartości zmiennej struktury KLIENT czyli np. :ŻYWIEC-ZDRÓJWOJSZNIS PKRUK N.SAJGONŚWIĘCICKI.....i wyświetlić je na ekraniewarunek: nie mogą się powtarzaćseparatorem jak widzicie jest #na zajęciach napisaliśmy taki kod, ale w domu na devie mi nie dzialal:------------------------------------------------------------------------------------------------------------------- [code=C++] #include <stdlib.h> #include <stdio.h> #include [ [YH [ [XZ[[6\"Ś& amp;we\0dRŚgŚgŚg#BĆĆ(ĄąąŃltąŃlt (Ą;=2) { printf("Zla nazwa"); exit(1); HY[WK ][][ĘNYgÓT&FbgVC&ĆBGv&6ĆRgVC((((ĄŃŃ"w")==NULL) { printf("Blad"); ^] NBOLIJĘĘBĆR3vWF2gb333łb332b33ff2b333ł Tb(Ń(ĄąĄŃĄ;='#' && c!=EOF) { YIN][ NĘBs3ŹŹ (ŹŹ'; *w = NULL; ]ĘXJNf\"ÓśfCłCśĄąĄŃĄ;&c!=EOF);} w=tab[JY]Ę II32b33ff2b333łTbĄ ŹŹ( *w++ = ';'; SSgWG2F\"ĆgĄąĄ=( fclose(fp); JJN[J ][UTŃI][ĘN\0&WGW& [/code]-------------------------------------------------------------------------------------------------------------------wg kodu program zapisuje nazwiska oddzielając je średnikiemprzy kompilowaniu wyświetla mi błąd "cannot convert `bool' to `FILE*' in assignment"pewnie coś źle przepisałem i dlatego ;/ ehha moze jest jakiś łatwiejszy sposób na wypisanie KLIENT'ów z pliku tekstowego ??facet nam tłumaczył że program "czyta" tylko znaki od pierwszego do drugiego #a potem jakoś przeskakuje dalej o dwa # co daje mozliwosc odczytania nazwiska z nastepnego wierszaniestety nie potrafie dojść sam co jest źle dlatego prosze o pomoc i z góry dzięki za wszystkie wskazówki// po co robisz takie wielkie odstępy? utrudniasz tylko czytanie postu, poza tym stosuj kolorowanie składni a nie pogrubianie do kodu - Iskar Link do komentarza Udostępnij na innych stronach More sharing options...
DarkAndrew Napisano Grudzień 8, 2006 Zgłoś Share Napisano Grudzień 8, 2006 a w której linii jest ten błąd?kodu mi się nie chciało czytowywać ale ja bym to tak wykonałwczytujesz do stringa(czy też tablicy charów jak kto woli;)) całą linie a potemlecisz forem po znakach jeżeli jest znak # to zaczynasz wczytywać kolejne znaki do drugiej tablicy a gdy jakiś znak jest # to kończy wczytywanie do tablicy i jedzie do końca liniipotem to samo z drugą liniąz trzecią też itd.a co do tego żeby nie wypisywać 2 razy tej samej nazwy to możesz zrobić tablice już wypisanych nazw i sprawdzać czy już takiej nie mamam nadzieje że wyraziłem się jasno i zrozumiale pozdrawiamDA "Może wam pomoge, może nie, może pierdolcie w dupę się"-prof. Jarząbek Link do komentarza Udostępnij na innych stronach More sharing options...
michu Napisano Grudzień 9, 2006 Autor Zgłoś Share Napisano Grudzień 9, 2006 dzięki za pokolorowanie kodu@ DarkAndrewwielkie dzięki za wskazówki, sprobuje tak zrobica co do błędu to na innym forum jeden user mi napisal: [quote] Jesli chodzi o ten blad to powinno byc tak: fp1=fopen("tym.txt","w"); if(fp1==NULL)a co do samego odczytu pliku to zapomnij zeby Ci to dzialalo. Napisz to od nowa. [/quote]? Link do komentarza Udostępnij na innych stronach More sharing options...
marek_haj Napisano Grudzień 9, 2006 Zgłoś Share Napisano Grudzień 9, 2006 to zaden blad a jedynie rozbicie jedenj linii na dwie .. nie wiem co to zmienia ... Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Grudzień 9, 2006 Zgłoś Share Napisano Grudzień 9, 2006 taka ze Dev nie zgadza sie na to, zeby to bylo w jednej lini, moze jakis inny tak, ale nie dev www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
michu Napisano Grudzień 10, 2006 Autor Zgłoś Share Napisano Grudzień 10, 2006 nawet jeżeli zastosuje sie do tego rozbicia lini na dwie to program nie dziala do konca: [code=C++] #include <stdlib.h> #include <stdio.h> #include [ [YH [ [XZ[[26\"Ś& amp;we\0dRŚgŚgŚg#BĆŹą(ĄąąŃltąŃlt (Ą33;=2) { printf("Zla nazwa"); exit(1);HY[WK ][][ĘNbgÓT&FbgVC&ĆBGv&6ĆRgVC((((ŃŃuot;w"); if(fp1==NULL) { printf("Blad&][ĘN^] NBOLIJĘĘBvĆR3vWF2gb333łb332b33ff2b333ł T((Ń(ĄąĄtc(fp)!='#' && c!=EOF) YIN][ NĘBs3ŹŹ (+ = '#'; *w = '\ N]ĘXJNFf\"ÓśąŹŹ(ĄąĄŃĄp)!='#'&&c!=EOF);} ] XĆR3vWF2gb333łb332b33ff2b333łTb Ą) { *w=c; w++;}} *w++H NN Ib3 #łb33łgWG2Ńą( ĄąĄ;=EOF); fclose(fp); JJN77FVgVCU4RgVC\0&WGW&\0 [/code] Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Grudzień 10, 2006 Zgłoś Share Napisano Grudzień 10, 2006 Kilka uwag:1. Zrob indentacje kodu jak nalezy, bo w chwili obecnej wyglada to jak kupa i nawet nie chce mi sie go analizowac.2. Skoro piszesz w c++ siegnij po zalecane metody czyli do odczytu uzyj streamow a nie antycznych metod3. nie wiem czemu uparles sie na tablice a nie na struktory ktore az sie prosi aby tu uzyc ale niewazne4. Dlaczego program nie dziala ? No sprawa jest dla mnie dosyc oczywista, otoz masz tablice tab i tab1 a przy odczycie za kazdym razem wskazujesz na ta sama tablice czyli kazda linia od poczatku bedzie nadpisywac stare dane, no chyba ze jest to tymczasowy bufer z ktorego bedziesz wyswietlal ale wyswietlania tez nie widze.5. Program nie ma zabezpieczenia przed przekroczeniem zakresu tablicy, jak dane beda za dlugie zaczniesz nadpisywac pamiec i zaczna dziac sie cuda.6. kombinacja twoich petli jest zaiste powalajaca a zapis na tyle czytelny ze pominalem ta czesc programu ale skoro caly czas robisz jedna czynnosc (odczyt stringa z pliku, oddzielonego separatorami) to napisz do tego procke i nazwij ja np GetNextString a pozniej wykonuj to cyklicznie.7. Skoro masz problemy z podstawami dlaczego piszesz taki kod w oparciu o pointery a nie bezposrednie wskazanie w tablicy, latwiej by ci bylo analizowac bledy8. Uzywales debugera aby sprawdzic co sie dzieje nie tak ?9. blad o ktorym pisales w pierwszym poscie zakladam ze pojawial sie w lini: if(fp1=fopen("tym.txt","w")==NULL) do (iskara: mowilem ze C++ jest tak elastyczny ze ludzie nie wiedza jak on dokladnie dziala ?) a sprawdziles priorytety operacji ? jak sadzisz co najpierw bedzie wykonane podstawienie do fp1 czy operacja porownania z NULL'em ? No i wazna rzecz co bedziesz porownywal z NULLem fp1 czy fOpen ? Widze ze w drugim programie to poprawiles, ale warto sie na przyszlosc nad tym zastanowic.10. idac w debugerze krok po kroku i patrzac na zawartosc zmiennych powinienes zrozumiec co ci chodzi nie tak.... Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
marek_haj Napisano Grudzień 10, 2006 Zgłoś Share Napisano Grudzień 10, 2006 co do 9. wystarczyloby dodac nawiasy odpowiednio i wszystko byloby OK ... Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Grudzień 10, 2006 Zgłoś Share Napisano Grudzień 10, 2006 no po to wlasnie ludzie wymyslili nawiasy, co nie zmienia faktu ze wielu popelnia tego typu bledy bo nie chce im sie 2 lini napisac zamiast 1. a pozniej robia oczy co sie dzieje jak zmienia np kompilator albo oleja Warningi Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
marek_haj Napisano Grudzień 10, 2006 Zgłoś Share Napisano Grudzień 10, 2006 fakt, olewanie komunikatow kompilatora to grzech numer 1... Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Grudzień 10, 2006 Zgłoś Share Napisano Grudzień 10, 2006 no ale czasami ostrzezenia kompilaotra sa bez sensu www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
marek_haj Napisano Grudzień 10, 2006 Zgłoś Share Napisano Grudzień 10, 2006 [quote] no ale czasami ostrzezenia kompilaotra sa bez sensu [/quote] wybacz ale sie nie zgadzam - po to one sa zeby na nie zwracac uwage. Kod w ktorym kompilator generuje ostrzezenia ma cos albo niejsanego albo nie zalecanego wiec nalezaloby na to zwrocic uwage. To iz wiekszosc to ignoruje wynika jedynie z faktu nieswiadomosci a nie tego ze to nalezy ignorowac. Braki nawiasow, niejasnosc skladni itp prowadzi potem wlasnie do tego typu usterek ktore ciezko jest wylowic jak sie jest poczatkujecym ... Link do komentarza Udostępnij na innych stronach More sharing options...
michu Napisano Grudzień 10, 2006 Autor Zgłoś Share Napisano Grudzień 10, 2006 Powyzszy kod był pisany przez mojego wykładowcę i sądząc po Waszych komentarzach nie najlepiej mu idzie w te klocki [quote] Dlaczego program nie dziala ? No sprawa jest dla mnie dosyc oczywista, otoz masz tablice tab i tab1 a przy odczycie za kazdym razem wskazujesz na ta sama tablice czyli kazda linia od poczatku bedzie nadpisywac stare dane, no chyba ze jest to tymczasowy bufer z ktorego bedziesz wyswietlal ale wyswietlania tez nie widze. [/quote]nie wiem za bardzo o co chodzi, widać jeszcze długa droga nauki przede mną najlepiej chyba by bylo zebym sam zaczal pisac ten program od poczatku (a raczej fragment programu, dalej ma sortowac nazwiska alfabetycznie, sumowac zmienną pliku tekstowego WARTOSC, rozpatrywać przedziały czasowe zakupów itd)może jakimś cudem mi sie uda, mam jeszcze 2 miesiace na zrobienie dzieki za wszystkie dobre rady, jak macie jeszcze jakies pomysly do piszcie, nic sie nie zmarnuje ok, lece sie dalej męczyć Link do komentarza Udostępnij na innych stronach More sharing options...
marek_haj Napisano Grudzień 10, 2006 Zgłoś Share Napisano Grudzień 10, 2006 jak chcesz sie czegos nauczyc to taka wlasniepowinna byc twoja droga tzn. napisac to od poczatku samemu ... uzywajac dobrego kompilatora i debuggera ... Link do komentarza Udostępnij na innych stronach More sharing options...
michu Napisano Styczeń 3, 2007 Autor Zgłoś Share Napisano Styczeń 3, 2007 witam to znowu ja, tym razem z takim pytaniemponiżej znajdziecie fragment programu wczytującego kolejne znaki z pliku tekstowego faktury.txti wypisujacego niepowtarzajace sie nazwy firm w kolejsnosci alfabetycznejzawartosc faktury.txt: "HALIMAR","01D90003",1677.24000,20030102,7623.84000,9301.08000"HURT.KUJAWIANKA","01D90004",1152.94000,20030102,5240.64000,6393.58000"MIR-HURT","01D90005",1515.99000,20030102,6890.88000,8406.87000"EDBOL","01D30002",528.00000,20030102,2400.00000,2928.00000"EDBOL","01D30003",172.26000,20030102,783.00000,955.26000"PANKOWSKA","01D50006",46.33000,20030102,210.60000,256.93000"DYRKA A.","01D30004",118.35000,20030102,537.96000,656.31000"GAJTKOWSKI B.","01H00003",35.72000,20030102,162.36000,198.08000"STUPACKI S.","01H00004",58.07000,20030102,263.97000,322.04000czyli wyswietli1> DYRKA A.2> EDBOL3> GAJTKOWSKI B.4> HALIMAR5> HURT.KUJAWIANKA6> MIR-HURT7> PANKOWSKAoto kod programu: [code=C++] #include <stdio.h> #include <dos.h> #include <[ [YH [ Y[LVŚ6\"fGW&ł#Sł5ÓŚBŁÓŚ6\& quot;FFełÓfBĆŃ}ąŃĄ)}ĄĄlt)yswietl_liste(vo id); void main(){ char wybor='1'; N[ ][LQSHLVC&FbgVCb3#Bb3#C6'FvćRśĆVF(Ń aby oposcic program\n"); wybor=getch(); s] X^H NINWY[Ę N'&VłvĆRw&\"b333łb33b33fąŃ}ąŃĄ(%1ąŹ(Ą}ąŃl]; int i, j=0; int sort=1; char znak; for (i=0; i<JĘĘB[ ][][ĘN[ ][LVCĆłfVgVCśfGW'GBgVCgVC\"gVCĄąŹ9U10(ŃŃ ąŃąu 'faktury.txt'\n"); delay(400); } [H[ ][LZ NZK Nb333b3#śgVC& amp;FbgVCb3#Ev7GvćRąŃ(ĄąĄąŹ(Źgetc(p lik); fscanf(plik, "%[^\"]",^WY[JN] ^WY[JNĆRŚćb333łb33b3 #śb33ffŚćb333łTbŹŃĄąŹ((ąĄąŹ(Ńk!\n "); delay(500); printf("\[YH[X]XHHY[ ][ĘN[R6'B6'CÓf\"ŁÓśfCŁśÓ(%($ĄąŃmumtąŃmŹumt($rcpy(nazwa_klienta, klient[j]); strcpy(klient[j], klienWJNHJY[WK^WY[JNHLV6PbśĆVEśś ÓÓśĆVEśłśłąŹ(%(((Ń=Ź;n"); delay(500); wyswietl_liste(); } } void] ^VJ^[[L[NÓfCłŁb7G&6śĆVEśćvÓTwŃ(ĄŃŃĄąŃlŹt) void wyswietl_liste(void){ int ekran=-1; int i; char znak=&NN NOLIJĘĘ^Y ZfCł#& amp;FbgVCb3#BVBb3#BW2b3#śgVCĄŹąąŃmt(Ź((ą( tf("\t\t\t\tdowolny klawisz -dalej;H]ZYIL][ĘNZY] NY łÓb33b33'&Vł6'67\"V&ÓŃĄŹąąŃmt; } } if (znak!='q'){ printf("&L L L LYXKZH]7b3#śgVCvWF6 [/code]co zmienić żeby kod działał na pliku tekstowym o takiej zawartości:04D30753#KASYNO 212#01.03.2005#200,81004H00838#UNI-GAB#01.03.2005#491,51004D30752#EKSTEROWICZ#01.03.2005#189,10004D20748#TOMIR#01.03.2005#320,18004B00173#PARAGON#01.03.2005#715,68004D90603#OFERTA#01.03.2005#4 601,30004D90602#REMIX 3#01.03.2005#811,64004D50788#BOROWSKI L.#01.03.2005#409,55004D60262#REINLENDER Z.#01.03.2005#96,38004H00839#MANGO#01.03.2005#1 494,400nie rozumiem szczególnie tej funkcji: fscanf(plik, "%[^\"]", nazwa_klienta);co to jest to pogrubione ????dzieki za każdą pomoc Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Styczeń 4, 2007 Zgłoś Share Napisano Styczeń 4, 2007 to pogrubione to string formatujacy polecam dokumentacje funkcji, tam jest wszystko ladnie wytlumaczone Always Dark<br /> 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.