Problem kod zadatka u Ulaz i izlaz

Problem kod zadatka u Ulaz i izlaz

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Imam da uradim jedan zadatak, a on glasi da treba da iz jednog fajla, tekst koji se nalazi u njemu da se taj tekst iskopira u drugi fajl. Ja sam napravio dva fajla i dao im ime. Napravio sam program i onda im ukucam ime onog prvog i ime onog drugog i one se lepo otvore ali se tekst ne iskopira, evo koda:
#include <stdio.h> #include <stdlib.h> #define MAXPUT 128 int main () {     int in, on;     char ime1[MAXPUT], ime2[MAXPUT];     FILE *izvorni, *odredisni;     printf("Unesite ime izvornog fajla: ");     gets(ime1);     if(ime1[0] == '\0'){         fprintf(stderr, "Nije uneto ime!");         exit(EXIT_FAILURE);     }     printf("\nUnesite ime odredisnog fajla: ");     gets(ime2);     if(ime2[0] == '\0'){         fprintf(stderr, "Nije uneto ime!");         exit(EXIT_FAILURE);     }     izvorni = fopen(ime1, "r");     if(izvorni == NULL){         fprintf(stderr, "Otvaranje %s nije uspelo", ime1);         exit(EXIT_FAILURE);     }     odredisni = fopen(ime2, "r");     if(odredisni == NULL){         fprintf(stderr, "Otvaranje %s nije uspelo", ime2);         exit(EXIT_FAILURE);     }     while((in = fgetc(izvorni)) != EOF)         putc(in, /*sta treba ovde?*/);     fclose(izvorni);     fclose(odredisni);     return EXIT_SUCCESS; }

Hvala unapred!



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

1. Umesto "r" (read) treba da stavis "w" (write)
//odredisni = fopen(ime2, "r"); odredisni = fopen(ime2, "w");

2. Treba da stavis handle fajla:
putc(in, odredisni/*sta treba ovde?*/);

Citas li ti uopste dokumentaciju funkcija koje koristis?



offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Napisano: 06 Nov 2012 10:40

Citam, ali za ovo putc funkciju, sam znao da treba da ide odredisni, ali nisam bio siguran, pa sam zato ostavio prazno.

Hvala ti puno!

Dopuna: 09 Nov 2012 19:51

Evo da ne otvaram novu temu, nego ovde, posto je vezano za Ulaz, Izlaz i fajlove.

Ima jedan zadatak koji nemogu da resim, on glasi ovako:
Napisite program koji cita tekstualni fajl i daje izvestaj o duzini najduze i najkrace reci i naduzeg i najkraceg reda u fajlu.

Ja dodjem do tamo akd se fajl otvara, mislim na ovo;
pf = fopen(ime, "r");
I dalje nemam predstavu sta treba da se radi.

Nadam se da ce te mi pomoci.

Hvala unapred!

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Mrzi me da objasnjavam a i potrajalo bi sigurno par postova pa cu postaviti ceo kod. Nadam se da je razumljiv, ako ne pitaj slobodno. Happy coding.
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE 80 int main() {    size_t brKarakteraUNajduzojReci = 0;    size_t brKarakteraUNajkracojReci = -1;// unsigned int max -1 == 4294967295u    size_t brKarakteraUNajduzojLiniji = 0;    size_t brKarakteraUNajkracojLiniji = -1;// unsigned int max -1 == 4294967295u    size_t brNajduzeLinije = 0;    size_t brNajkraceLinije = 0;    size_t brTrenutneLinije = 0;    char* najduzaRec = NULL;    char* najkracaRec = NULL;    FILE* file = fopen("ulaz.txt", "r");    char buffer[MAX_LINE];    char tokens[] = " ,.';\n";    while(fgets(buffer, MAX_LINE, file) != NULL)    {       ++brTrenutneLinije;       size_t len = strlen(buffer);       if(brKarakteraUNajduzojLiniji < len)       {          brKarakteraUNajduzojLiniji = len;          brNajduzeLinije = brTrenutneLinije;       }       if(brKarakteraUNajkracojLiniji > len)       {          brKarakteraUNajkracojLiniji = len;          brNajkraceLinije = brTrenutneLinije;       }       char* pch = strtok(buffer, tokens);       while(pch != NULL)       {          len = strlen(pch);          if(brKarakteraUNajduzojReci < len)          {             if(NULL != najduzaRec)             {                free(najduzaRec);                najduzaRec = NULL;             }             najduzaRec = (char*)malloc(sizeof(char) * len + 1);             memcpy(najduzaRec, pch, len);             najduzaRec[len] = '\0';             brKarakteraUNajduzojReci = len;          }          if(brKarakteraUNajkracojReci > len)          {             if(NULL != najkracaRec)             {                free(najkracaRec);                najkracaRec = NULL;             }             najkracaRec = (char*)malloc(sizeof(char) * len + 1);             memcpy(najkracaRec, pch, len);             najkracaRec[len] = '\0';             brKarakteraUNajkracojReci = len;          }          pch = strtok (NULL, tokens);       }    }    printf("Najduza rec je \'%s\' i ima %u karaktera.\n", najduzaRec, brKarakteraUNajduzojReci);    printf("Najkraca rec je \'%s\' i ima %u karaktera.\n", najkracaRec, brKarakteraUNajkracojReci);    printf("Najduza linija je linija %u i ima %u karaktera.\n", brNajduzeLinije, brKarakteraUNajduzojLiniji);    printf("Najkraca linija je linija %u i ima %u karaktera.\n", brNajkraceLinije, brKarakteraUNajkracojLiniji);    fclose(file);    free(najduzaRec);    free(najkracaRec);    return 0; }

ulaz.txt
Citat:
Na vr' brda vrba mrda.
Riba ribi grize rep.
Ko jamu kopa fizicki je radnik.
Bez muke nema nauke.

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Ja pola ove funkcije i ove tipove ne koristim i neznam sta su i sta rade, kao sto su: free, size_t, strtok, memcpy, malloc.
A ovu liniju uopste ne razumem: najduzaRec = (char*)malloc(sizeof(char) * len + 1);

Ja stvarno neznam, sto mi dadose ovaj zadatak na kraju, Ulaz, izlaz i fajlove, kad ovo pre toga se nista ne spominje u knjizi. Stvarno ne razumem ovaj kod, nemoras da mi objasnis, sam cu, nego mozes lid a mi das neki link ili nesto, gde mogu da ove funkcije i tipove malo razjasnim.

Ja sam pre nekoliko godina, oko 3, kupio knjigu za programiranje od Denisa Ricija i Brian Kerningana, ali mi je bila komplikovana, pa sam kupio ovu sto sad imam od Augie Hansen, jer je bila laksa, pa imam jos 2 poglavlja da zavrsim(naravno i da razumem, jer do ovde dokle sam dosao, sve razumem), pa cu onda da uzmem ovu od Denisa Ricija da citam i ucim.

Mislim da sam napisao razumljiv tekst, da bih mogao da razumes.

Hvala ti sto hteo da mi odgovoris i potrudio!!

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Ne razumem kako si uopste dosao do ovog zadatka a nisi prosao ove funkcije?
Evo, probacu u detalje da razjasnim:

1.
size_t je tipa unsigned int koji je u dometu brojeva 0 - 4294967295.
Koristimo ovaj tip jer rezlutati promenjljivih ne mogu biti negativni a i slaze se sa tipom povratne vrednosti funkcije strlen posto od nje uzimamo tu vrednost.

2.
malloc rezervise prostor na hipu za reci koja je najduza i najkraca.
Koristimo takozvano dinamicko alociranje zato sto ne znamo unapred velicinu te reci.
malloc za parametar trazi velicinu u bajtima koju ce da rezervise tako da pisem:
(char*) // kastujemo u nas tip malloc( sizeof(char) //obicno je 1 * len //duzina trenuutne reci koju smo dobili od strlen funkcije + 1 // za null terminating character
3.
free oslobadja memoriju koju smo rezervisali

3.
Ukratko strtok rastura string na delove na kontu delimitera.
while(fgets(buffer, MAX_LINE, file) != NULL)
Znaci uzimamo liniju po liniju iz fajla i tu vrednost drzimo u buffer promenjljivoj pa je prosledjujemo strtok funkciji gde su delimiteri
" ,.';\n" (space, zarez, tacka, apostrof...) i onda tako dobijamo reci razdvojene.

4.
Sa memcpy kopiramo tu rec u nasu promenjljivu da bi je posle prikazali:
if(NULL != najkracaRec) // ako je vec rezervisano a ima krace reci             {                free(najkracaRec);// moramo osloboditi taj prostor da ne bi imali "memory leak"                najkracaRec = NULL;             }             najkracaRec = (char*)malloc(sizeof(char) * len + 1);//rezervisi prostor             memcpy(najkracaRec, pch, len);//iskopiraj na taj prostor             najkracaRec[len] = '\0';// terminisi sa null karakterom             brKarakteraUNajkracojReci = len;

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Napisano: 10 Nov 2012 11:43

Neznam ni ja kako, ali nisam prosao to sto sam ti napisao.
Sad, onako, razumem, ne bas najbolje, ali bar malo. Proci cu to i u drugoj knjizi, pa ce biti jasnije.
Ipak, ti hvala sto si se potrudio da mi objasnis, znaci nije da bas ne razumem, razumem, ali, otom potom.

Hvala ti!!

Dopuna: 10 Nov 2012 13:44

Nego, je kad u programu pretisnem enter, to je isto kao '\n'. Je tako ili je nesto drugo?

Ko je trenutno na forumu
 

Ukupno su 1464 korisnika na forumu :: 244 registrovanih, 14 sakrivenih i 1206 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 6018 - dana 19 Dec 2025 13:41

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: -Max-, 1MAP, _stipa_, advokat84, aramis s, Aska, Asparagus, Avalon015, babaroga, BAKI89, bavar357, Bbbggg1979, Beardonitch, Bivan, bladesu, Bo96, Bob.Rock, Bobrock1, Bojan85, boskelazo, Botovac, brundo65, bufanje, Burovnyak, cemix, cifra, cole77, Colt D, Comyymoc, crnitrn, d.arsenal321, Darko8, debeli, Deki Duga Devetka, deki1001, Denaya, DENIRO, deri3891, Dimitrije Paunovic, djboj, Djole3621, djonsule, doloress, Dorcolac, Dovla 1980, dragan_mig31, draganca, Draganeli, draganl, dragoljub11987, Dragon Order, dragon986, DuškoMraz, Džekson, ElvisP, EXIT78, Flanker-G, Gargantua, Gibli, Gitzherai, Glavni Oružni, Gogi do, GreenMan, halkin gol, hawkeye, HawX, iceburn, Igritelj, InzenjerBL, ISOF, istina, istokzapad, Ivica1102, Jager715510, jalos, jarovitt, Jester, Jezekijel, jodzula, Jomini, Kenanjoz, klepesina, kmnmada, kokodakalo, Kolex21, kolle.the.kid, komsija1, Koridor, kovacicbozo, Krin, kripo, Kruger, Krusarac, kunktator, kybonacci, lafa008, Laske, Lazarus, Lelemood, Levi, Limeni91, LjubisaR, Lucije Kvint, M1los, macak44, Macalone, Major Tankosić, Makarid, mane123, Manjane, Marko Marković, MarkoDzimi, Marxy, max power, medaTT, Mercury, metallac777, Metanoja, MidnighT_AlieN, Mig 29, mig21, Miki01, mikrimaus, Milan 84, milimoj, milivoje_vatrogasac, MILO-VAN, Milometer, Milos82, Milost111, miodrag, mir juzni, Mis uz pusku, MKK7, mkukoleca, mm1811, mxzzz, N.e.m.a.nj.a., Natuzzi, Naum T, Ne doznajem se u oružje, neko_drugi, nelezele, Nemanja94, nenooo, Nepopravljivi, Neutral-M, nextyamb, nick79, nikoladim, nnnnnnnnnn, novator, Ns1975, Ognjen D., OldKresoje, Orc, orfanel, Otto Grunf, Panter, pavle_pzs, Pekman, peradetlić, Pero Petković, Phaeton, Pilence, Player035, pobeda, Podljub, Posmatrac77OKB, Potkozarje, Povratak1912, PrincipL, proka89, promajauglavi, Prometeus, Pururin, pzoca, radionica1, RajkoB, Rakenica, Regrut Boskica, Remarqe, Resad76, royst33, RS28, Samo gledam, samojednoimeznam, saputnik plavetnila, sarma, sasa87, savaskytec, Sevatar, Sharpshooter, Shinobi, Simon simonović, Sioux7674, Sir Budimir, Sky diver 29, SOVO515, spektorsky, srbijaiznadsvega, Srna, Srpska zauvjek, Stanoje-glavas, Steeeefan, stegonosa, tanakadzo, Tandrčak, tecataki, Titan, tmanda323, TRZH92, tuf, umpah-pah, urosbg, uruk, V-98, vathra, Vatreni Zmaj, Veless, Velički, veljkovicdani, vensla, VJ, Vlad000, Vlada1389, vladivostok, wolverined4, Wrangler, yagosh, Yugol33, Zandar, Zastava, zeka013, zemljanin, zil10, Zmaj Ognjeni Vuk, zokilivac, zokizemun, zombicar153, Zorge, zule2, Žrnov, šumar bk2