Forum » Programiranje » [C] Zakaj točno "printf(getchar() != EOF);" ne dela in zakaj potrebujem "%d"
[C] Zakaj točno "printf(getchar() != EOF);" ne dela in zakaj potrebujem "%d"
Rias Gremory ::
Živjo,
začel sem se učiti C s The C Programming Language od K&R.
Sem pri vaji 1-6 pri poglavju Character Input and Output.
Vaja pravi:
Poženem v terminalu in napišem nek znak potem ponovno poženem in končam z CTRL+D. CTRL+D vrne 0, znaki pa 1.
Najprej sem probal
ampak mi vrne segmentation fault.
Tole pa deluje:
Torej vprašanje je zakaj točno rabim %d?
Če prav razumem %d pove printf-u, da bo getchar() vrnil vrednost tipa int?
Imam prav?
EDIT: Typo.
začel sem se učiti C s The C Programming Language od K&R.
Sem pri vaji 1-6 pri poglavju Character Input and Output.
Vaja pravi:
Exercise 1-6. Verify that the expression getchar() != EOF is 0 or 1.
Poženem v terminalu in napišem nek znak potem ponovno poženem in končam z CTRL+D. CTRL+D vrne 0, znaki pa 1.
Najprej sem probal
#include <stdio.h> main() { printf(getchar() != EOF); }
ampak mi vrne segmentation fault.
Tole pa deluje:
#include <stdio.h> main() { printf("%d", getchar() != EOF); }
Torej vprašanje je zakaj točno rabim %d?
Če prav razumem %d pove printf-u, da bo getchar() vrnil vrednost tipa int?
Imam prav?
EDIT: Typo.
Mirno gledamo, kako naš svet propada,
saj za časa našega življenja ne bo popolnoma propadel.
saj za časa našega življenja ne bo popolnoma propadel.
- spremenilo: Rias Gremory ()
sas084 ::
Glede na definicijo, printf vzame 1 ali več argumentov, kjer je prvi argument pointer na formatiran niz, ostali argumenti pa so opcijski (glede na to katere vrednosti za formatiranje uporabljaš v nizu). V prvem primeru
si za pointer na formatiran niz dal vrednost "true" al pa "false" (odvisno kaj ti vrne "getchar() != EOF"), če to prevedeš v C dobiš vrednosti 0x01 ali 0x00 oz. če vzameš da maš 32-bitne pointerje potem dobiš vrednosti 0x00000001 oz 0x00000000, iz katerih je potem poskušala funkcija brat niz. Glede na memory mapping si dal naslov do interrupt vektorjev, do katerih seveda nimaš dostopa, zato si dobil segmentation fault. Funkcija getchar vrne naslednji znak iz standard inputa oz. EOF ki pomeni da na stdin-u ni več podatkov oz. da je prišlo pri branju do napake.
#include <stdio.h> main() { printf(getchar() != EOF); }
si za pointer na formatiran niz dal vrednost "true" al pa "false" (odvisno kaj ti vrne "getchar() != EOF"), če to prevedeš v C dobiš vrednosti 0x01 ali 0x00 oz. če vzameš da maš 32-bitne pointerje potem dobiš vrednosti 0x00000001 oz 0x00000000, iz katerih je potem poskušala funkcija brat niz. Glede na memory mapping si dal naslov do interrupt vektorjev, do katerih seveda nimaš dostopa, zato si dobil segmentation fault. Funkcija getchar vrne naslednji znak iz standard inputa oz. EOF ki pomeni da na stdin-u ni več podatkov oz. da je prišlo pri branju do napake.
szalb ::
Dober odgovor, sas084. :-)
Rias Gremony, imaš prav, "%d" v formatu funkciji pove, da bo pripadajoč argument tipa int. V tvojem primeru je ta argument izraz getchar() != EOF, ki preveri, ali je vrednost, ki jo vrne klic funkcije getchar, različna od konstante EOF (to je ponavadi makro #define EOF -1); izraz se ovrednoti v 1, če je prebrana vrednost različna od EOF in 0 sicer.
Rias Gremony, imaš prav, "%d" v formatu funkciji pove, da bo pripadajoč argument tipa int. V tvojem primeru je ta argument izraz getchar() != EOF, ki preveri, ali je vrednost, ki jo vrne klic funkcije getchar, različna od konstante EOF (to je ponavadi makro #define EOF -1); izraz se ovrednoti v 1, če je prebrana vrednost različna od EOF in 0 sicer.
Zgodovina sprememb…
- spremenil: szalb ()
Invictus ::
Preberi si dokumentacijo za printf ...
"Life is hard; it's even harder when you're stupid."
http://goo.gl/2YuS2x
http://goo.gl/2YuS2x
Rias Gremory ::
Hvala vsem za odgovor!
@Invictus
Bom jutri prečital, obljubim.
@Invictus
Bom jutri prečital, obljubim.
Mirno gledamo, kako naš svet propada,
saj za časa našega življenja ne bo popolnoma propadel.
saj za časa našega življenja ne bo popolnoma propadel.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C] čuden izpis iz txt dat. na zaslonOddelek: Programiranje | 1665 (1402) | l0g1t3ch |
» | [C++][Naloga_polja]MIN in MAX polja, izpis za x.100 stevilOddelek: Programiranje | 2940 (2751) | snow |
» | strcpy reče segmatation faultOddelek: Programiranje | 1497 (1448) | MasterMind |
» | [c++] Kako ugotoviti katera tipka je bila pritisnjenaOddelek: Programiranje | 1481 (1253) | 64202 |
» | C problemčekOddelek: Programiranje | 1062 (865) | OwcA |