[ Príspevkov: 5 ] 
AutorSpráva
Offline

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

Registrovaný: 27.01.10
Prihlásený: 24.03.15
Príspevky: 31
Témy: 12 | 12
NapísalOffline : 05.10.2012 22:07 | C++ problem s char

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ý: 11.01.18
Príspevky: 1434
Témy: 2 | 2
Bydlisko: Praha / Rev...
NapísalOffline : 05.10.2012 23:37 | C++ problem s char

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.07.17
Príspevky: 1297
Témy: 9 | 9
Bydlisko: HE
NapísalOffline : 06.10.2012 10:55 | C++ problem s char

@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ý: 24.03.15
Príspevky: 31
Témy: 12 | 12
Napísal autor témyOffline : 07.10.2012 18:50 | C++ problem s char

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.07.17
Príspevky: 1297
Témy: 9 | 9
Bydlisko: HE
NapísalOffline : 07.10.2012 18:52 | C++ problem s char

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.


 [ Príspevkov: 5 ] 


C++ problem s char



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

353

05.12.2011 14:07

t-pack25

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

C Int to Char

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

2

139

20.10.2012 15:13

faraon

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

testovanie prvku pola char [C++]

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

6

315

06.07.2010 8:09

koso

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

C - konverzia char na int

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

14

454

02.04.2011 18:16

M4rek

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

860

08.10.2010 11:54

Blackshadow

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

132

09.12.2012 10:43

nBXXL

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

Problem C&C Generals

v Počítačové hry

20

868

12.10.2007 21:09

Matokoko

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

C&C: Rengade-problem

v Počítačové hry

0

351

21.04.2009 15:39

GothicMan

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

C&C Generals problem

v Počítačové hry

2

374

16.01.2011 12:35

Luks

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

delete char*

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

4

251

17.11.2012 20:04

m4r14n

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

933

08.05.2011 15:57

slavix

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

mer. char.zenerovej diody

v Elektronika

0

235

10.01.2012 20:34

p4tooo

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

char pole do int

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

0

222

19.01.2011 22:38

1daemon1

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

Banalny priklad-char. tranzistora

v Elektronika

10

826

07.03.2007 12:43

Taomas

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

Zmena char na int

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

6

303

02.02.2012 23:18

street_punk

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

odelenie num a char

v PHP, ASP

2

231

10.11.2009 20:22

pilná lama glama



© 2005 - 2018 PCforum, edited by JanoF