Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

koliko rijeci ima u file
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
Kova
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 27. 02. 2004. (23:13:50)
Postovi: (4B)16
Spol: muško
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 18:57 čet, 16. 6. 2005    Naslov: koliko rijeci ima u file Citirajte i odgovorite

Danas na usmenom iz c-a profesor mi je postavio pitanje da izbrojim koliko ima rijeci u fileu, rijec je sve sto nije blank, tab ili new line caracter.
ja sam to napravio ovako:

[code:1]#include <stdio.h>
#include <stdlib.h>
int main () {
int br=0;
char ch, temp, datoteka[40];
FILE *fp;
printf("upisite ime datoteke " );
scanf("%s", &datoteka);
fp=fopen(datoteka, "rt");

if (fp== NULL)
{ printf(" Ne mogu otvoriti %s za citanje\n ", datoteka);
exit (1);
}

fscanf(fp, "%c", &ch);

while (ch!= EOF)
{
temp=ch;
fscanf(fp,"%s%*c", &ch);
printf("%c",ch);
if (temp==' ' || temp=='\t' || temp=='\n')
{ if(ch!=temp)
br=br+1;
}
}

printf("broj rijeci u fileu je %d\n", br);
fclose(fp);
return 0;

} [/code:1]

iskompajlirao sam ga , ali mi je kod izvrsavanja ispisivao beskonacno blankova :shock:

profesor mi nije znao reci gdje je greska, bio je preumoran da se jos s time nateze..
kad je on napisao umjesto fscanf, fgetc (fp)radilo je . tj radi kad napisem ovako.

[code:1] temp=' ';
while ((ch=fgetc(fp)!= EOF)
{


printf("%c",ch);
if (temp==' ' || temp=='\t' || temp=='\n')
{ if(ch!=temp)
br=br+1;
} temp=ch;
}[/code:1]
Bi li mi netko mogao objasniti zasto.
Nisam pao, ali sam dobio 4 sto sam odbio.
Danas na usmenom iz c-a profesor mi je postavio pitanje da izbrojim koliko ima rijeci u fileu, rijec je sve sto nije blank, tab ili new line caracter.
ja sam to napravio ovako:

Kod:
#include <stdio.h>
#include <stdlib.h>
int main () {
    int br=0;
    char ch, temp, datoteka[40];
    FILE *fp;
    printf("upisite ime datoteke " );
    scanf("%s", &datoteka);
    fp=fopen(datoteka, "rt");
   
    if (fp== NULL)
    { printf(" Ne mogu otvoriti %s za citanje\n ", datoteka);
     exit (1);
    }
   
    fscanf(fp, "%c", &ch);
   
    while (ch!= EOF)
    {
          temp=ch;
          fscanf(fp,"%s%*c", &ch);
          printf("%c",ch);
          if (temp==' ' || temp=='\t' || temp=='\n')
          { if(ch!=temp)
            br=br+1;
          }
     }
     
     printf("broj rijeci u fileu je  %d\n", br);
     fclose(fp);
     return 0;
   
  }       


iskompajlirao sam ga , ali mi je kod izvrsavanja ispisivao beskonacno blankova Shocked

profesor mi nije znao reci gdje je greska, bio je preumoran da se jos s time nateze..
kad je on napisao umjesto fscanf, fgetc (fp)radilo je . tj radi kad napisem ovako.

Kod:
    temp=' ';
    while ((ch=fgetc(fp)!= EOF)
    {
         
       
          printf("%c",ch);
          if (temp==' ' || temp=='\t' || temp=='\n')
          { if(ch!=temp)
            br=br+1;
          } temp=ch;
     }

Bi li mi netko mogao objasniti zasto.
Nisam pao, ali sam dobio 4 sto sam odbio.



_________________
kova
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3562)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 19:29 čet, 16. 6. 2005    Naslov: Citirajte i odgovorite

Ovo:

[code:1] fscanf(fp,"%s%*c", &ch); [/code:1]

Ucitava string (dakle [i]n[/i] byteova) u varijablu tipa [tt]char[/tt] (1 byte). :-s Ne znam da li je to uzrok tvog problema, ali je definitivno lose. :(
Ovo:

Kod:
          fscanf(fp,"%s%*c", &ch);


Ucitava string (dakle n byteova) u varijablu tipa char (1 byte). Eh? Ne znam da li je to uzrok tvog problema, ali je definitivno lose. Sad



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Kova
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 27. 02. 2004. (23:13:50)
Postovi: (4B)16
Spol: muško
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 19:59 čet, 16. 6. 2005    Naslov: Citirajte i odgovorite

ja mislim da sam napravio beskonacnu petlju :oops: .
[code:1]fscanf(fp, "%c", &ch);

while (ch!= EOF)
{
temp=ch;
fscanf(fp,"%c%*c", &ch); [/code:1]
dakle ja sam prvo ucitao jedan znak onda sam provjerio da li je taj znak razlicit od EOF (uvjet while petlje) ,ali kad dodjem do kraja filea fscanf mi nece nista staviti u ch jer nije nista procitao, pa je uvjet ch!= EOf besmislen , jer je ch uvijek razlicit od EOF . Trebao sam staviti
while ( (fscanf(fp, "%c", &ch)!=0) jer fscanf vraca broj ucitanih parametara a kad dodje do kraj filea nece procitati nista , vec ce vratiti nula.


sto uopce znaci %*c ?
na vjezbama u petak nam je receno da ce to "ucitati neki znak i baciti ga u smece". Asistent je rekao da moze i bez toga ak se dobro sjecam. Mislim da je to reko kada smo obradjivali vjezbe 12 74a___file_copy jer se tamo prvi puta pojavljuje taj znak.

Krivo pretipkah s papira mora biti fscanf (fp," %c" &ch) tak sam napiso i na usmenom .
ja mislim da sam napravio beskonacnu petlju Embarassed .
Kod:
fscanf(fp, "%c", &ch);
   
    while (ch!= EOF)
    {
          temp=ch;
          fscanf(fp,"%c%*c", &ch);

dakle ja sam prvo ucitao jedan znak onda sam provjerio da li je taj znak razlicit od EOF (uvjet while petlje) ,ali kad dodjem do kraja filea fscanf mi nece nista staviti u ch jer nije nista procitao, pa je uvjet ch!= EOf besmislen , jer je ch uvijek razlicit od EOF . Trebao sam staviti
while ( (fscanf(fp, "%c", &ch)!=0) jer fscanf vraca broj ucitanih parametara a kad dodje do kraj filea nece procitati nista , vec ce vratiti nula.


sto uopce znaci %*c ?
na vjezbama u petak nam je receno da ce to "ucitati neki znak i baciti ga u smece". Asistent je rekao da moze i bez toga ak se dobro sjecam. Mislim da je to reko kada smo obradjivali vjezbe 12 74a___file_copy jer se tamo prvi puta pojavljuje taj znak.

Krivo pretipkah s papira mora biti fscanf (fp," %c" &ch) tak sam napiso i na usmenom .



_________________
kova
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
Zvone
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 01. 07. 2003. (13:09:44)
Postovi: (9D)16
Sarma = la pohva - posuda
67 = 74 - 7

PostPostano: 20:18 čet, 16. 6. 2005    Naslov: Citirajte i odgovorite

Da, scanf ("%*c"); ili scanf("%*d"); ili nesto slicno znaci da se ono sto fja scanf procita ne zelimo spremiti u varijablu, vec jednostavno ignoriramo i preskacemo kod ucitavanja.

Inace, prebrojavanje broja rijeci u datoteci se moze rijesiti ovako nekako:

[code:1]while (fscanf (f, "%*s") != EOF)
broj_rijeci++;
[/code:1]

Kad scanf ucitava sa bilo cime osim sa %c, preskace sve praznine na koje naidje, sve do prvog ne-praznina znaka.
Da, scanf ("%*c"); ili scanf("%*d"); ili nesto slicno znaci da se ono sto fja scanf procita ne zelimo spremiti u varijablu, vec jednostavno ignoriramo i preskacemo kod ucitavanja.

Inace, prebrojavanje broja rijeci u datoteci se moze rijesiti ovako nekako:

Kod:
while (fscanf (f, "%*s") != EOF)
    broj_rijeci++;


Kad scanf ucitava sa bilo cime osim sa %c, preskace sve praznine na koje naidje, sve do prvog ne-praznina znaka.


[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
shokre
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 11. 05. 2003. (20:05:09)
Postovi: (4A)16
Spol: muško
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 21:41 čet, 16. 6. 2005    Naslov: Citirajte i odgovorite

Trebao si probat skurit profesora tako da se logiraš na studenta i podvaliti mu sljedeći program...

[code:1]#include <stdio.h>
#include <stdlib.h>

main( int argc, char* argv[] )
{
char str[50];

if( argc == 2 ) {
sprintf( str, "wc -w %s", argv[1] );
system( str );
}
else
printf( "Treba mi ime fajla!\n" );

return 0;
}
[/code:1]
Trebao si probat skurit profesora tako da se logiraš na studenta i podvaliti mu sljedeći program...

Kod:
#include <stdio.h>
#include <stdlib.h>

main( int argc, char* argv[] )
{
  char str[50];

  if( argc == 2 ) {
    sprintf( str, "wc -w %s", argv[1] );
    system( str );
  }
  else
    printf( "Treba mi ime fajla!\n" );

  return 0;
}



_________________
~ Those who fear the Darkness have never seen what the Light can do! ~
[Vrh]
Korisnički profil Pošaljite privatnu poruku YIM
Zvone
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 01. 07. 2003. (13:09:44)
Postovi: (9D)16
Sarma = la pohva - posuda
67 = 74 - 7

PostPostano: 0:56 pet, 17. 6. 2005    Naslov: Citirajte i odgovorite

To ne bi bilo "kurenje" profesora...mislim da bi ti dao 5 i zapisao si u tekicu da ti mora povisiti ocjenu i na RP1 iduce godine :)
Naravno, ako bi bilo potrebno...a cini se da ne bi bilo :lol:
To ne bi bilo "kurenje" profesora...mislim da bi ti dao 5 i zapisao si u tekicu da ti mora povisiti ocjenu i na RP1 iduce godine Smile
Naravno, ako bi bilo potrebno...a cini se da ne bi bilo Laughing


[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan