Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Ongo Forumaš(ica)

Pridružen/a: 13. 02. 2006. (14:37:33) Postovi: (23)16
|
Postano: 17:49 čet, 18. 5. 2006 Naslov: StdIn |
|
|
Hi
Imam novo pitanje.
[code:1]#include <stdio.h>
#include <string.h>
int main(){
int n;
char a[20],b[20];
scanf("%d",&n);
printf("Unesi prvi broj");
gets(a);
printf("Unesi drugi broj");
gets(b);
return 0;
}
[/code:1]
Nakon sto se utipka broj (n), pritisne se ENTER. Taj isti ENTER ('\n') gets(a) shvati kao svoj unos, a kako gets ucitava do pojave istog, ucitavanje je kratkog vijeka. gets(b) napravi sto bi napraviti trebao; izuzmemo li da ucita krivi string (no to je krivica predhodnog gets-a).
Ukoliko gets zamijenimo sa scanf (u formatu za string) problem se donekle rijesava. No, to je prelagano; postoje barem 3 nacina da se problem rijesi uz upotrebu gets-a: radi se o unosima ispred pojave prvog gets-a;
1.) fflush(stdin);
2.) scanf("%");
3.) scanf(" ");
Zasto scanf %d ne konzumira \n , tj. zasto ga ne makne iz input stream-a, kad ga je iskoristio (za indikaciju kraja unosa)? Ukoliko se ucitava vise %d -ova i ukoliko se medu pojednim unosima koriste \n , oni se nece gomilati, nego ce se uredno maknuti iz stream-a. Zasto je kraj unosa iznimka? Jasno mi je da zato scanf %s ne moze ucitati prazan string jer tada kombinirani formatirani unos ne bi imao smisla, no nikako mi nije jasno zasto scanf %d ne makne \n?
Sve sam probao; cak sam i setbuf postavio pa ispisivao sto se tocno u kom trenutku u bufferu dogada. No nije pomoglo. Stovise, cak me jos vise i zbunilo: it turns out, scanf %d unos zavrsi s 2, ne jednim \n. Zasto?
Takoder me zanima zasto 1.), 2.) i 3.) rijesavaju problem: iz nekog razloga znam da to tako treba rijesiti, ali ne znam (jos gore; ne razumijem) zasto?
Hi
Imam novo pitanje.
Kod: | #include <stdio.h>
#include <string.h>
int main(){
int n;
char a[20],b[20];
scanf("%d",&n);
printf("Unesi prvi broj");
gets(a);
printf("Unesi drugi broj");
gets(b);
return 0;
}
|
Nakon sto se utipka broj (n), pritisne se ENTER. Taj isti ENTER ('\n') gets(a) shvati kao svoj unos, a kako gets ucitava do pojave istog, ucitavanje je kratkog vijeka. gets(b) napravi sto bi napraviti trebao; izuzmemo li da ucita krivi string (no to je krivica predhodnog gets-a).
Ukoliko gets zamijenimo sa scanf (u formatu za string) problem se donekle rijesava. No, to je prelagano; postoje barem 3 nacina da se problem rijesi uz upotrebu gets-a: radi se o unosima ispred pojave prvog gets-a;
1.) fflush(stdin);
2.) scanf("%");
3.) scanf(" ");
Zasto scanf %d ne konzumira \n , tj. zasto ga ne makne iz input stream-a, kad ga je iskoristio (za indikaciju kraja unosa)? Ukoliko se ucitava vise %d -ova i ukoliko se medu pojednim unosima koriste \n , oni se nece gomilati, nego ce se uredno maknuti iz stream-a. Zasto je kraj unosa iznimka? Jasno mi je da zato scanf %s ne moze ucitati prazan string jer tada kombinirani formatirani unos ne bi imao smisla, no nikako mi nije jasno zasto scanf %d ne makne \n?
Sve sam probao; cak sam i setbuf postavio pa ispisivao sto se tocno u kom trenutku u bufferu dogada. No nije pomoglo. Stovise, cak me jos vise i zbunilo: it turns out, scanf %d unos zavrsi s 2, ne jednim \n. Zasto?
Takoder me zanima zasto 1.), 2.) i 3.) rijesavaju problem: iz nekog razloga znam da to tako treba rijesiti, ali ne znam (jos gore; ne razumijem) zasto?
|
|
[Vrh] |
|
Grof Forumaš(ica)


Pridružen/a: 26. 11. 2002. (17:15:33) Postovi: (44)16
|
|
[Vrh] |
|
Ongo Forumaš(ica)

Pridružen/a: 13. 02. 2006. (14:37:33) Postovi: (23)16
|
|
[Vrh] |
|
HijenA Forumaš(ica)

Pridružen/a: 23. 01. 2004. (16:46:04) Postovi: (3D2)16
Spol: 
Lokacija: Prazan skup ;-)
|
|
[Vrh] |
|
ahri Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07) Postovi: (193)16
|
|
[Vrh] |
|
Ongo Forumaš(ica)

Pridružen/a: 13. 02. 2006. (14:37:33) Postovi: (23)16
|
|
[Vrh] |
|
ahri Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07) Postovi: (193)16
|
|
[Vrh] |
|
goc9999 Forumaš(ica)


Pridružen/a: 15. 10. 2003. (19:31:20) Postovi: (238)16
Spol: 
Lokacija: Utrina
|
|
[Vrh] |
|
Ongo Forumaš(ica)

Pridružen/a: 13. 02. 2006. (14:37:33) Postovi: (23)16
|
|
[Vrh] |
|
|