Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Gordan Forumaš(ica)
Pridružen/a: 03. 11. 2002. (18:01:44) Postovi: (192)16
Spol:
Lokacija: Zagreb
|
|
[Vrh] |
|
C'Tebo Moderator
Pridružen/a: 03. 11. 2002. (18:40:48) Postovi: (26A)16
Lokacija: Zagreb
|
Postano: 19:21 pet, 11. 4. 2003 Naslov: |
|
|
a jesi probo scanf("%s",&chr); ??
a jesi probo scanf("%s",&chr); ??
_________________ Click me !
_______________________
Bad panda!
|
|
[Vrh] |
|
Gordan Forumaš(ica)
Pridružen/a: 03. 11. 2002. (18:01:44) Postovi: (192)16
Spol:
Lokacija: Zagreb
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 23:37 pet, 11. 4. 2003 Naslov: Re: scanf() |
|
|
[quote="Gordan"][code:1]char chr[255];
scanf("%5s",chr);
[/code:1]
tu se ljepo ucita string duljine pet, ali zasto umjesto te petice scanf ne zeli progutat neku varijablu, pa da mogu ucitatavat varijabilan broj znakova?[/quote]
Probaj ovako:
[code:1]scanf(sprintf("%%%ds", koliko_znakova), chr);[/code:1]
Moze se i bez toga; ima u helpu od Borland C++Buildera, ali mi trenutno nije pri ruci. Mozda sa upitnicima, nisam siguran... :?
Btw, nisam siguran ni za sintaxu sprintf(), pa provjeri. Ovo je samo ideja kako mozes dobiti varijabilni broj znakova.
Gordan (napisa): | Kod: | char chr[255];
scanf("%5s",chr);
|
tu se ljepo ucita string duljine pet, ali zasto umjesto te petice scanf ne zeli progutat neku varijablu, pa da mogu ucitatavat varijabilan broj znakova? |
Probaj ovako:
Kod: | scanf(sprintf("%%%ds", koliko_znakova), chr); |
Moze se i bez toga; ima u helpu od Borland C++Buildera, ali mi trenutno nije pri ruci. Mozda sa upitnicima, nisam siguran...
Btw, nisam siguran ni za sintaxu <tt>sprintf()</tt>, pa provjeri. Ovo je samo ideja kako mozes dobiti varijabilni broj znakova.
_________________ 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.
|
|
[Vrh] |
|
C'Tebo Moderator
Pridružen/a: 03. 11. 2002. (18:40:48) Postovi: (26A)16
Lokacija: Zagreb
|
Postano: 23:59 pet, 11. 4. 2003 Naslov: |
|
|
[quote="Gordan"][quote="C'Tebo"]a jesi probo scanf("%s",&chr); ??[/quote]
scanf kao argument uzima pointer na varijablu u koju se zeli spremiti ucitana vrijednost. kako je char zapravo pointer na char[0] adresni operator nije potreban kada se ucitava char. doduse vecina kompajlera ce to progutat ali nije po ANSIju[/quote]
Je, je, fakat, moj bed :oops:
Ali, poanta je bila na %s, tj. zakaj ti je koliko će string biti dugačak, čak i prije nego ga učitaš?
Gordan (napisa): | C'Tebo (napisa): | a jesi probo scanf("%s",&chr); ?? |
scanf kao argument uzima pointer na varijablu u koju se zeli spremiti ucitana vrijednost. kako je char zapravo pointer na char[0] adresni operator nije potreban kada se ucitava char. doduse vecina kompajlera ce to progutat ali nije po ANSIju |
Je, je, fakat, moj bed
Ali, poanta je bila na %s, tj. zakaj ti je koliko će string biti dugačak, čak i prije nego ga učitaš?
_________________ Click me !
_______________________
Bad panda!
|
|
[Vrh] |
|
Gordan Forumaš(ica)
Pridružen/a: 03. 11. 2002. (18:01:44) Postovi: (192)16
Spol:
Lokacija: Zagreb
|
Postano: 15:47 sub, 12. 4. 2003 Naslov: Re: scanf() |
|
|
[quote="vsego"]
Btw, nisam siguran ni za sintaxu <tt>sprintf()</tt>, pa provjeri. Ovo je samo ideja kako mozes dobiti varijabilni broj znakova.[/quote]
[code:1]int nLen=5;
char format[255];
sprintf(format, "%%%ds", nLen);
scanf(format, ...);[/code:1]
provjereno radi....
uglavno mislio sam da ce ici bez sprintf ali :(
vsego (napisa): |
Btw, nisam siguran ni za sintaxu <tt>sprintf()</tt>, pa provjeri. Ovo je samo ideja kako mozes dobiti varijabilni broj znakova. |
Kod: | int nLen=5;
char format[255];
sprintf(format, "%%%ds", nLen);
scanf(format, ...); |
provjereno radi....
uglavno mislio sam da ce ici bez sprintf ali
|
|
[Vrh] |
|
infinity Forumaš(ica)
Pridružen/a: 12. 03. 2004. (11:24:33) Postovi: (16)16
Spol:
Lokacija: Zagreb
|
|
[Vrh] |
|
Nesi Inventar Foruma (Moderator)
Pridružen/a: 14. 10. 2002. (14:27:35) Postovi: (E68)16
Spol:
Sarma: -
|
|
[Vrh] |
|
Zvone Forumaš(ica)
Pridružen/a: 01. 07. 2003. (13:09:44) Postovi: (9D)16
|
Postano: 17:48 pet, 19. 3. 2004 Naslov: |
|
|
Za ucitavanje n znakova ono sto rece Gordan je ok.
Problem sa gets(s) je sljedeci: zamislimo da smo za s alocirali (bilo staticki bilo dinamicki) 200 znakova, npr. deklaracijom char s[200].
gets ucitava znakove sve dok ne naleti na newline (\n) i onda to sto je ucitao spremi u buffer s. A sto se dogodi ako korisnik unese 201 znak? Onaj 201.-vi se spremi na mjesto u memoriji koje ne pripada varijabli s vec tko zna kome...
Osim toga, cini se da je originalno pitanje bilo kako ucitati tocno n znakova, n proizvoljni int, a gets ucitava cijelu liniju.
Oba ova problema rjesava naredba fgets: ona pozvana sa
fgets (s, n+1, stdin);
sa standardnog ulaza ucitava n znakova (ili prestaje ucitavati kad naleti na kraj reda) i sprema ih u varijablu s. Memoriju za s mozemo prije ucitavanja alocirati sa
s=(char *) malloc ((n+1)*sizeof (char));
Evo, nadam se da je ovo pomoglo :)
Za ucitavanje n znakova ono sto rece Gordan je ok.
Problem sa gets(s) je sljedeci: zamislimo da smo za s alocirali (bilo staticki bilo dinamicki) 200 znakova, npr. deklaracijom char s[200].
gets ucitava znakove sve dok ne naleti na newline (\n) i onda to sto je ucitao spremi u buffer s. A sto se dogodi ako korisnik unese 201 znak? Onaj 201.-vi se spremi na mjesto u memoriji koje ne pripada varijabli s vec tko zna kome...
Osim toga, cini se da je originalno pitanje bilo kako ucitati tocno n znakova, n proizvoljni int, a gets ucitava cijelu liniju.
Oba ova problema rjesava naredba fgets: ona pozvana sa
fgets (s, n+1, stdin);
sa standardnog ulaza ucitava n znakova (ili prestaje ucitavati kad naleti na kraj reda) i sprema ih u varijablu s. Memoriju za s mozemo prije ucitavanja alocirati sa
s=(char *) malloc ((n+1)*sizeof (char));
Evo, nadam se da je ovo pomoglo
|
|
[Vrh] |
|
infinity Forumaš(ica)
Pridružen/a: 12. 03. 2004. (11:24:33) Postovi: (16)16
Spol:
Lokacija: Zagreb
|
Postano: 15:00 sub, 20. 3. 2004 Naslov: |
|
|
[quote="Zvone"]Za ucitavanje n znakova ono sto rece Gordan je ok.
Problem sa gets(s) je sljedeci: zamislimo da smo za s alocirali (bilo staticki bilo dinamicki) 200 znakova, npr. deklaracijom char s[200].
gets ucitava znakove sve dok ne naleti na newline (\n) i onda to sto je ucitao spremi u buffer s. A sto se dogodi ako korisnik unese 201 znak? Onaj 201.-vi se spremi na mjesto u memoriji koje ne pripada varijabli s vec tko zna kome...
Osim toga, cini se da je originalno pitanje bilo kako ucitati tocno n znakova, n proizvoljni int, a gets ucitava cijelu liniju.
Oba ova problema rjesava naredba fgets: ona pozvana sa
fgets (s, n+1, stdin);
sa standardnog ulaza ucitava n znakova (ili prestaje ucitavati kad naleti na kraj reda) i sprema ih u varijablu s. Memoriju za s mozemo prije ucitavanja alocirati sa
s=(char *) malloc ((n+1)*sizeof (char));
Evo, nadam se da je ovo pomoglo :)[/quote]
Ja sam u jednom svom programu napisao sljedece:
npr.
char a [sizeof(x)];
gets(x);
tako nesto slicno i radilo je.. dobro nije bio char nego int varijabla... ma neznam... valjda je krivo... moram opet provjeriti :wink:
Zvone (napisa): | Za ucitavanje n znakova ono sto rece Gordan je ok.
Problem sa gets(s) je sljedeci: zamislimo da smo za s alocirali (bilo staticki bilo dinamicki) 200 znakova, npr. deklaracijom char s[200].
gets ucitava znakove sve dok ne naleti na newline (\n) i onda to sto je ucitao spremi u buffer s. A sto se dogodi ako korisnik unese 201 znak? Onaj 201.-vi se spremi na mjesto u memoriji koje ne pripada varijabli s vec tko zna kome...
Osim toga, cini se da je originalno pitanje bilo kako ucitati tocno n znakova, n proizvoljni int, a gets ucitava cijelu liniju.
Oba ova problema rjesava naredba fgets: ona pozvana sa
fgets (s, n+1, stdin);
sa standardnog ulaza ucitava n znakova (ili prestaje ucitavati kad naleti na kraj reda) i sprema ih u varijablu s. Memoriju za s mozemo prije ucitavanja alocirati sa
s=(char *) malloc ((n+1)*sizeof (char));
Evo, nadam se da je ovo pomoglo |
Ja sam u jednom svom programu napisao sljedece:
npr.
char a [sizeof(x)];
gets(x);
tako nesto slicno i radilo je.. dobro nije bio char nego int varijabla... ma neznam... valjda je krivo... moram opet provjeriti
|
|
[Vrh] |
|
Nesi Inventar Foruma (Moderator)
Pridružen/a: 14. 10. 2002. (14:27:35) Postovi: (E68)16
Spol:
Sarma: -
|
|
[Vrh] |
|
infinity Forumaš(ica)
Pridružen/a: 12. 03. 2004. (11:24:33) Postovi: (16)16
Spol:
Lokacija: Zagreb
|
|
[Vrh] |
|
SvekY Forumaš(ica)
Pridružen/a: 21. 11. 2003. (23:44:22) Postovi: (FF)16
Spol:
Lokacija: unitarni vektorski prostor
|
|
[Vrh] |
|
Crni Forumaš(ica)
Pridružen/a: 15. 12. 2003. (01:20:43) Postovi: (23C)16
Spol:
Lokacija: Zagreb
|
|
[Vrh] |
|
|