Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Jos jedan zadatak sa datotekama

[es] :: C/C++ programiranje :: C/C++ za početnike :: Jos jedan zadatak sa datotekama

[ Pregleda: 2530 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

cyber_killer

Član broj: 90634
Poruke: 95
*.dial-up.dsl.siol.net.



Profil

icon Jos jedan zadatak sa datotekama20.03.2007. u 20:03 - pre 215 meseci
Evo opet se javljam sa zadatkom.Napraviti moram program koji pročita 2 fajla i onda izpise linije u kojeme se razlikujeju.Osim toga mi mora jos izpisati broj linije u kojem se razlikuju.Duzina linije mora biti najvise 80 znakova.

Evo sta sam ja piso,al mi to neradi kako treba.

Code:
#include<stdio.h>

void razlicito(char *lin1, char *lin2, int brojL)
{
    if( strcmp (lin1,lin2) < 0 || strcmp (lin1,lin2)  > 0 )

        printf( "%d<%s\n%d>%s\n", brojL, lin1, brojL, lin2);
        
}
main(int argc, char *argv[])
{
    FILE *dat1,*dat2;
    char lin1 [80];
    char lin2 [80];
    int i=0;

    if(argc != 3)
    {
        exit(0);
    }

    if( (dat1=fopen(argv[1], "r") )==NULL ){
        printf("Error u otvaranju datoteke %s\n ", argv[1] );
    }
    if( (dat2=fopen(argv[2],"r") )==NULL ){
        printf("Error u otvaranju datoteke %s \n", argv[2]);
    }
    while( (fgets(lin1,80,dat1) != NULL) && (fgets(lin1,80,dat1) != NULL));
    {
        razlicito(lin1,lin2,i);
                i++;
    }
    return 0;
}




 
Odgovor na temu

SuPeR_MaSteR
Marko Stamenković

Član broj: 88590
Poruke: 115
*.inffo.net.



Profil

icon Re: Jos jedan zadatak sa datotekama21.03.2007. u 01:15 - pre 215 meseci
Nisam puno citao tvoj kod, sklepao sam nesto na brzinu pa odoh da spavam:
Code:

#include <stdio.h>
#include <string.h>
#define DUZ 80
int main(int argc, char* argv[])
{
    FILE *dat1, *dat2;
    char lin1[DUZ], lin2[DUZ];
    int brLinije = 1;
    if (argc != 3)
       return -1;
    dat1 = fopen(argv[1],"r"), dat2 = fopen(argv[2],"r");
    if (dat1 == NULL || dat2 == NULL)
        return -1;
    for (brLinije = 1; !feof(dat1) && !feof(dat2); brLinije++)
        if (strcmp(fgets(lin1, DUZ, dat1), fgets(lin2, DUZ, dat2)) != 0)
            printf("Linija broj %d:\n%sse razlikuje od:\n%s\n", brLinije, lin1, lin2);
    fclose(dat1), fclose(dat2);
}

(zasad radi) :)
 
Odgovor na temu

cyber_killer

Član broj: 90634
Poruke: 95
153.5.132.*



Profil

icon Re: Jos jedan zadatak sa datotekama21.03.2007. u 11:21 - pre 215 meseci
Radi na pola koliko ja vidim.Na kraju program crkne :D i kad dadnem npr.prve tri linije da su jednake,onda dadnem 2 linije prazne i u drugoj datoteki 2 prazne linije i onda nakon toga jos jednu liniju,bi trebo izpisati da se razlikuje ali ne izpise.
 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
89.190.198.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: Jos jedan zadatak sa datotekama21.03.2007. u 12:44 - pre 215 meseci
Znači, sajber, u while pri svakom prolazu čitaš po dve linije od prvog fajla umesto po jednu od prvog i drugog - odatle bi poticao problem poređenja. Ono bitnije je da ti ne treba tačka-zarez nakon while. Uz prvu prepravku, uklanjanje ovog znaka će rešiti i problem brojenja linija.
Ipak se ++uje.
 
Odgovor na temu

cyber_killer

Član broj: 90634
Poruke: 95
*.dial-up.dsl.siol.net.



Profil

icon Re: Jos jedan zadatak sa datotekama22.03.2007. u 15:53 - pre 215 meseci
Ja te nisam bas dobro razumio.De mi prepravi u kodi da vidim,sta si mislio.Ovaj program od SuPeR_MaSteR fakticki radi ono sto bi trebo,jedino kazem kad dadnem vise linija onda smrzne.
 
Odgovor na temu

SuPeR_MaSteR
Marko Stamenković

Član broj: 88590
Poruke: 115
*.inffo.net.



Profil

icon Re: Jos jedan zadatak sa datotekama23.03.2007. u 11:01 - pre 215 meseci
Ne znam zasto moj prethodni kod ne radi, logika je ok ali izgleda da funkcija strcmp() ne poredi kako treba bele znakove ili je problem do fgets() (?!)
@cyber_killer, testiraj ovaj kod, kod mene je sve ispravno:
Code:

#include <stdio.h>
#include <string.h>
#define DUZ 80
void poredi(char* lin1, char* lin2, int brLinije);

int main(int argc, char* argv[])
{
    FILE *dat1, *dat2;
    char lin1[DUZ], lin2[DUZ];
    int brLinije = 1;
    dat1 = fopen(argv[1],"r"), dat2 = fopen(argv[2],"r");
    if (dat1 == NULL || dat2 == NULL)
        return -1;
    for (brLinije = 1; !(feof(dat1) || feof(dat2)); brLinije++)
        poredi(fgets(lin1, DUZ, dat1), fgets(lin2, DUZ, dat2), brLinije);
    fclose(dat1), fclose(dat2);
}

void poredi(char* lin1, char* lin2, int brLinije)
{
   int d1 = strlen(lin1), d2 = strlen(lin2);
    if (d1 != d2)
        printf("Linija broj %d:\n%s se razlikuje od:\n%s\n", brLinije, lin1, lin2);
    else
    {
        int i;
        for (i = 0; i < d1 && lin1[i] == lin2[i]; i++);
        if (i != d1)
            printf("Linija broj %d:\n%s se razlikuje od:\n%s\n", brLinije, lin1, lin2);
    }
}
 
Odgovor na temu

cyber_killer

Član broj: 90634
Poruke: 95
*.dial-up.dsl.siol.net.



Profil

icon Re: Jos jedan zadatak sa datotekama25.03.2007. u 12:26 - pre 215 meseci
Radi tvoja koda,al za moje znanje malo previse komplicirana.Ponavljam za moje znanje.Evo ja sam napravio ovu kodu.Sve radi dobro osim toga da mi sjece prvo slovo.Neznam to ispraviti.Evo npr.imam datoteku1 i datoteku2.U datoteki1 imam sljedeci string: asdfghjkl (prva linija), yxcvb (druga linija ) qwert (treca linija ).
U datoteki2 imam npr. afdsfasdf (prva linija), jfdsfidffd (druga linija), dfefere (treca linija). E sad moj progam izpise sve razlike ali mi u izpisu odsjece prvo slovo.
Onda me jos zanima npr.kad dadnem u datoteki1 dodatni 5 prazni linija i u datoteki2 dadnem u 5 liniju jedan string.Tude je isto razlika koliko ja razumijem.Trebo bi izpisati razliku al mi ne izpise razlike.


Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DUZ 80

int main() {

    FILE *dat1=fopen("dat1.txt", "r");
    FILE *dat2=fopen("dat2.txt","r");
    char lin1[DUZ];
    char lin2[DUZ];
    int brLin=1;
    char *linija1, *linija2;
        do {
            linija1=fgets(lin1, DUZ, dat1);
            linija2=fgets(lin2, DUZ, dat2);

                if(strcmp(linija1,linija2)!=0) 
                     {
                    printf("-------------------------------------------------------------------------------\n");
                    printf("Br. linije: %d\n", brLin);
                    printf("datoteka 1: %s\n", linija1);
                    printf("datoteka 2: %s\n", linija2);
                    brLin++;
                }
                else if(strcmp(linija1,linija2)==0)
                    brLin++;
                else
                    brLin++;
        } while(fgetc(dat1)!=EOF && fgetc(dat2)!=EOF);
    fclose(dat1); fclose(dat2);
    return 0;
}
 
Odgovor na temu

SuPeR_MaSteR
Marko Stamenković

Član broj: 88590
Poruke: 115
*.inffo.net.



Profil

icon Re: Jos jedan zadatak sa datotekama25.03.2007. u 13:21 - pre 215 meseci
Gubljenje prvog slova se desava zbog uslova u while petlji:
Code:
while(fgetc(dat1)!=EOF && fgetc(dat2)!=EOF)

Tu se ucitava iz obe datoteke po jedan karakter i file pointer se inkrementira za 1, tako da pri sledecem iscitavanju gubis ta prva slova.

Umesto toga bolje je da koristis funkciju feof() koja sluzi kao indikator kraja fajla:
Code:
while ( ! (feof(dat1) || feof(dat2)) ) /* ako je kraj bar jedne datoteke rezultat je logicka neistina i ne izvrsava se telo petlje

Vise o funkciji feof() nalazi se na adresi:
http://www.cplusplus.com/reference/clibrary/cstdio/feof.html

A u ovom delu koda:
Code:

if(strcmp(linija1,linija2)!=0) 
                     {
                    ........
                }
                else if(strcmp(linija1,linija2)==0)
                    brLin++;
                else
                    brLin++;

Poredjenje if(strcmp(linija,linija2) == 0) ti nije potrebno jer ako povratna vrednost funkcije nije razlicita od nule (1 uslov), logicno je da je onda jednaka nuli, nema treceg.
 
Odgovor na temu

cyber_killer

Član broj: 90634
Poruke: 95
*.dial-up.dsl.siol.net.



Profil

icon Re: Jos jedan zadatak sa datotekama25.03.2007. u 14:45 - pre 215 meseci
Hvala ti za pomoc.
 
Odgovor na temu

SuPeR_MaSteR
Marko Stamenković

Član broj: 88590
Poruke: 115
*.inffo.net.



Profil

icon Re: Jos jedan zadatak sa datotekama26.03.2007. u 23:41 - pre 215 meseci
No frks ;)
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Jos jedan zadatak sa datotekama

[ Pregleda: 2530 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.