[ argonius @ 06.03.2006. 22:12 ] @
ne znam kako da u c-u ucitam cijelu liniju iz datoteke zajedno sa svim karakterima i razmacima uz pomoc fscanf. sta bih trebao dodati kodu, i dal je to uopste moguce uz pomoc ove funkcije??


main()
{
FILE *ulaz;
char buffer[300];

fscanf(ulaz,"%s",buffer);
}
[ Marko Stankovic @ 06.03.2006. 23:14 ] @
Mozes recimo ovako:

Code:

FILE *ulaz;
char buffer[300];
char c;
int i=0;

while((c=fgetc(ulaz))!='\n') buffer[i++]=c;
buffer[i]='\0';



ili mozes da koristis fgets() funkciju, mada cini mi se da ona dodaje i '\n' u string... A mozda i gresim.


update
tek sam sada video da trazis bas pomocu fscanf funkcije. Iskreno trenutno mi ne pada na pamet kako bi to moglo da se odradi, jer kada koristis %s on cita string do prvog belog znaka. Tako da ako nije neophodno da koristis fscanf onda citaj na nacin koji sam opisao iznad.

poz



[Ovu poruku je menjao Marko Stankovic dana 07.03.2006. u 00:23 GMT+1]
[ argonius @ 07.03.2006. 01:36 ] @
Hvala ti.Na tvoj nacin sam rijesio ovaj problem, vrlo je jednostavan. Ipak volio bih znati da li se nekako mogu izbjeci whitespace sa fscanf-om, pa ako neko uspije naci rjesenje nek mi javi!

pozdrav!



[ zokio @ 07.03.2006. 03:37 ] @
bas izricito sa "fscanf()" funkcijom bi to izgledalo nekako ovako mada nema smisla jedino ako ti zadatak izricito nalaze tako, a ako ne onda fino koristi "getc()" kako je covijek naveo i to je to !


Code:

main()
{

FILE *fp;
int i=0;
char c, buf[300];

fp=fopen("imedat", "r");

while((fscanf(fp,"%c",&c))!='\n')
{
buf[i]=c;
i++;
}

}
[ fearless @ 07.03.2006. 12:25 ] @
Citat:
ili mozes da koristis fgets() funkciju, mada cini mi se da ona dodaje i '\n' u string

Sto se lako moze i resiti ako bas hoces nju ;). Npr:

Code:

/* zbog fgets-ovog newline upisivanja */
for(i = 0; i < strlen(string); i++) {
      if(string[i] == '\n' || string[i] == '\r') break; }
string[i] = '\0';




[Ovu poruku je menjao fearless dana 07.03.2006. u 13:26 GMT+1]
[ argonius @ 07.03.2006. 12:46 ] @
rijesio sam problem!

Zahvaljujem se na pomoci svima...
[ Marko Stankovic @ 07.03.2006. 14:54 ] @
Citat:
fearless: Sto se lako moze i resiti ako bas hoces nju ;). Npr:

Code:

/* zbog fgets-ovog newline upisivanja */
for(i = 0; i < strlen(string); i++) {
      if(string[i] == '\n' || string[i] == '\r') break; }
string[i] = '\0';



Naravno da se to lako resava :) Nisam mislio da je komplikovano vec je stvar sto funkcija fgets radi na nacin koji sam ja napisao, odnosno poziva fgetc() dok ne dodje do '\n', pa cisto da covek ima predstavu kako se to radi na neki "sirov" nacin.


@zokio

mislim da taj nacin ne radi jer fscanf ne vraca kod procitanog znaka vec vraca broj procitanih znakova, tako da bi ta petlja uvek bila true.
[ yooyo @ 08.03.2006. 15:10 ] @
Code:

fscanf (f, "%[^\n]\n", buffer); // cita sve do kraja reda, i upisuje u buffer a zatim procita i znak za novi red (\n) ali ga nigde nece sacuvati

fscanf (f, " %[^\n]\n", buffer); // preskace vodece whitespace i cita sve do kraja reda, i upisuje u buffer a zatim procita i znak za novi red (\n) ali ga nigde nece sacuvati


yooyo
[ NrmMyth @ 08.03.2006. 16:20 ] @
Kakva je ovo sintaxa? Smrdi mi na ne standard.
[ yooyo @ 08.03.2006. 17:36 ] @
Citat:
NrmMyth: Kakva je ovo sintaxa? Smrdi mi na ne standard.


Gresis. to je po standardu... Samo sto niko nece da cita detalje o format stringu.
http://www.eskimo.com/~scs/cclass/int/sx2f.html

[ zokio @ 08.03.2006. 21:22 ] @
Citat:

@zokio

mislim da taj nacin ne radi jer fscanf ne vraca kod procitanog znaka vec vraca broj procitanih znakova, tako da bi ta petlja uvek bila true.


Da u pravu si fscanf() funkcija je korisna u onom mom navedenom kodu samo ako se koristi ovako

Code:


#include<stdio.h>

main()
{

FILE *fp;
int j,i=0;
char c, buf[300];

fp=fopen("imedat.txt", "r");

while((fscanf(fp,"%c",&c))!=EOF)
{
    //printf("%c",c); -ako bas hoces da ti prvo pohranjuje u buffer
buf[i]=c;
i++;
}

for(j=0;j<i;j++)
printf("%c",buf[j]);

}



evo cijelog koda uz pomoc fscanf do kraja datoteke to radi





,a za novi red treba malo razmislit, javim se...
[ NrmMyth @ 09.03.2006. 01:19 ] @
Zanimljivo... dobro je znati.