Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 5 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
C++ problem s char

Registrovaný: 27.01.10
Prihlásený: 15.02.23
Príspevky: 31
Témy: 12
Príspevok NapísalOffline : 05.10.2012 22:07

Zdravim,
pls helpnite mi niekto lebo asi rozbijem monitor. Neviem ci je dodrbany program alebo moj mozog xD. Mam takyto program v Microsoft Visual C++ 2006:

#include<stdio.h>

int main()
{
float i,j, sucet;
char c;

printf("Zadaj cislo\n");
scanf("%f", &i);
printf("Zadaj 2 cislo\n");
scanf("%f", &j);
sucet = i + j;
printf("Zadal si cisla %f a %f, ich sucet je %f\n", i,j,sucet);

printf("Zadaj znak\n");
scanf("%c", &c);
printf("Zadal si znak %c, jeho hodnota je %i", c, c);

return 0;
}


Ked to buildnem, a idem to ocekovat ci setko funguje, tak sa ma normalne opyta na 1. cislo ja mu ho zadam potom na 2. cislo ja mu ho zadam potom mi napse sucet. Potom mu drbne a nevypyta si odo mna Znak ale dosadi si tam medzeru a napise hodnotu 10. Potom programujem to v jazyku C nie C++!! Dakujem za kazdu radu :)


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 05.10.2012 23:37

Skús sa pohrať s funkciou fflush(stdin) a pohádzať ju medzi jednotlivé načítania.







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Skúsený užívateľ
Skúsený užívateľ
C++ problem s char

Registrovaný: 11.01.09
Prihlásený: 19.03.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 06.10.2012 10:55

@C1yde: Deje sa to preto, lebo: V prvom scanf nacitas float a stlacis enter ( to je znak, cize char ), obe sa ulozia do buffera. Nasledne sa do premennej i ulozi nacitane cislo z buffra a znak enter zostane v bufferi. Potom znova nacitavas float a kedze v bufferi je iba char, nie float, tak si vyzvany na vstup. Znova vlozis float, stlacis enter a obe sa ulozia v bufferi ( uz tam mame char enter, float a znova char enter. Prvy float uz je vybraty a ulozeny v premennej, cize tam nie je ). Nakoniec volas treti scanf, kde nacitavas znak ale v bufferi uz jeden mas ( ten posledny stlaceny enter ), cize nebudes vyzvany na vstup z klavesnice ale rovno sa ti do premennej c vlozi znak noveho riadku ( enter ).

Ja neodporucam volat fflush na stdin, pretoze to je tzv nedefinovane spravanie (undefined bahavior). Nemusi to korektne fungovat na vsetkych kompileroch a Cecko nema iba jeden kompiler a nebezi iba na jednom OS, na to treba mysliet. Skor odporucam tam, kde pracujes so znakmi, pripadne retazcami, pouzit v predchadzajucom scanf argument c s hviezdicku, takto: %*c
Priklad:
Kód:
printf("Zadaj cislo\n");
scanf("%f", &i);
printf("Zadaj 2 cislo\n");
scanf("%f%*c", &j);            /* za tymto scanf volas dalsi, kde nacitavas znaky, cize tuna vloze %*c */
sucet = i + j;
printf("Zadal si cisla %f a %f, ich sucet je %f\n", i,j,sucet);

printf("Zadaj znak\n");
scanf("%c%*c", &c);           /* tuna uz nemusis, lebo tu program konci, ale tak na skodu tu nebude, taktiez ani v prvom scanf */


Alebo si napis vlastnu funkciu na vyprazdnenie vstupneho buffra, napriklad ako je popisane tu http://c-faq.com/stdio/stdinflush2.html

Zaroven si prezri tuto temu, tu sa to riesilo taktiez a popisoval som to tam hlbsie: http://www.pcforum.sk/nefungujuci-fgets-vt127550.html


Offline

Užívateľ
Užívateľ
C++ problem s char

Registrovaný: 27.01.10
Prihlásený: 15.02.23
Príspevky: 31
Témy: 12
Príspevok Napísal autor témyOffline : 07.10.2012 18:50

Diki kamo funguje to. Len sa chcem este spytat ze co vlastne robi pri scanf(%f%*c) ta hviezdicka? preco sa tam dava? dik :D


Offline

Skúsený užívateľ
Skúsený užívateľ
C++ problem s char

Registrovaný: 11.01.09
Prihlásený: 19.03.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 07.10.2012 18:52

V linku, ktory som tu postol, som to vysvetlil: http://www.pcforum.sk/nefungujuci-fgets ... ml#1176120
Je to aj v referencii: http://www.cplusplus.com/reference/clib ... dio/scanf/

Fico píše:
"An optional starting asterisk indicates that the data is to be retrieved from stdin but ignored, i.e. it is not stored in the corresponding argument." - znamena to, ze sa precita dalsi znak ( iba jeden ) z buffra, ale neulozi sa do dalsej premennej, bude ignorovany.


Odpovedať na tému [ Príspevkov: 5 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. C, problem s osetrenim vstupu z klavesnice - char

v Assembler, C, C++, Pascal, Java

5

519

05.12.2011 14:07

t-pack25 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C Int to Char

v Assembler, C, C++, Pascal, Java

2

322

20.10.2012 15:13

faraon Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. testovanie prvku pola char [C++]

v Assembler, C, C++, Pascal, Java

6

474

06.07.2010 8:09

koso Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C - konverzia char na int

v Assembler, C, C++, Pascal, Java

14

677

02.04.2011 18:16

M4rek Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C: z getchar() do char *retazec

v Assembler, C, C++, Pascal, Java

9

989

08.10.2010 11:54

Blackshadow Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C/C++ problém so súbormi a hodnotami

v Assembler, C, C++, Pascal, Java

2

302

09.12.2012 10:43

nBXXL Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem C&C Generals

v Počítačové hry

20

1231

12.10.2007 21:09

Matokoko Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C&C: Rengade-problem

v Počítačové hry

0

523

21.04.2009 15:39

GothicMan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C&C Generals problem

v Počítačové hry

2

639

16.01.2011 12:35

Luks Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. delete char*

v Assembler, C, C++, Pascal, Java

4

409

17.11.2012 20:04

m4r14n Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem s teplotou? Speedfan Core- 4°C a Core 96°C

v AMD - Advanced Micro Devices

18

1214

08.05.2011 15:57

slavix Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. odelenie num a char

v PHP, ASP

2

342

10.11.2009 20:22

pilná lama glama Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. char pole do int

v Assembler, C, C++, Pascal, Java

0

350

19.01.2011 22:38

1daemon1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. mer. char.zenerovej diody

v Elektronika

0

486

10.01.2012 20:34

p4tooo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Banalny priklad-char. tranzistora

v Elektronika

10

1117

07.03.2007 12:43

Taomas Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zmena char na int

v Assembler, C, C++, Pascal, Java

6

507

02.02.2012 23:18

street_punk Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra