problem v c

Programovacie jazyky, rady, poradňa...
peto1310
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 21 jún 2006, 17:20

problem v c

Príspevok od používateľa peto1310 »

Caute, preco mi nasledujuci skript vyhodi take divoke cislo ? (napr. ked napisem znak a), ale ked funkciu scanf nahradim funkciu getchar tak to funguje, mozete mi to vysvetlit ?
dik

Kód: Vybrať všetko

  int i;
  scanf("%c",&i);
  printf("%d",i);

audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

lebo ho načítaš ako znak, ale vypíšeš ako číslo. Ak dávaš pri scanf %c tak do daj aj pri printf

Kód: Vybrať všetko

printf("%c",i);
peto1310
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 21 jún 2006, 17:20

Príspevok od používateľa peto1310 »

to je urobene zamerne, lebo chcem zistit jeho cislo v ascii tab.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

%c očakáva typ char a nie int (z toho int ti to nastaví len jeden bajt, v ostatných ostane to, čo tam bolo predtým) a keby si si prečítal upozornenia pri kompilácii, určite ti to tam kompilátor napísal.
peto1310
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 21 jún 2006, 17:20

Príspevok od používateľa peto1310 »

aha, nno kompilator mi nijake upozornenie nevypisal, a myslis to tak ze int ma 4 bajty, cize v tych zvysnych 3och bajtoch zostane to co bolo, nie ?
neppo
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 774
Registrovaný: 09 jún 2005, 15:33

Príspevok od používateľa neppo »

neviem mne ten kod funguje uplne v pohode. Pouzivam Dev-C++ mozno v inom kompilatore alebo v starsich verziach sa to moze lisit
piton
King
King
Používateľov profilový obrázok
Príspevky: 1902
Registrovaný: 02 aug 2005, 0:31
Bydlisko: Hnojisko

Príspevok od používateľa piton »

Ma to byt takto... Kazdy spravny kompilator by ti mal vyhodit warning, ze v scanf ocakava typ char * a nie int *.

Kód: Vybrať všetko

  char i; 
  scanf("%c",&i); 
  printf("%d",i);
peto1310
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 21 jún 2006, 17:20

Príspevok od používateľa peto1310 »

aky kompilator pouzivate ? ja pouzivam codeblocks, vlastne to je IDE
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ako si už napísal, Code::Blocks nie je kompilátor (ten program môže používať rôzne kompilátory). :)
Ja používam gcc a parameter -Wall (aby mi to písalo všetky upozornenia).
piton
King
King
Používateľov profilový obrázok
Príspevky: 1902
Registrovaný: 02 aug 2005, 0:31
Bydlisko: Hnojisko

Príspevok od používateľa piton »

ja pouzivam tiez gcc, a warning to vypise aj bez parametra -Wall :)
peto1310
Light Expert
Light Expert
Príspevky: 37
Registrovaný: 21 jún 2006, 17:20

Príspevok od používateľa peto1310 »

zistil som ze codeblocks pouziva gnu gcc kompiler, ale v nastaveniach som nikde ten parameter nenasiel...
Napísať odpoveď