| | |
| Stránka: 1 z 1
| [ Príspevkov: 5 ] | |
Autor | Správa |
---|
Registrovaný: 27.01.10 Prihlásený: 15.02.23 Príspevky: 31 Témy: 12 | Napísal C1yde: 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
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 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! |
|
Registrovaný: 11.01.09 Prihlásený: 19.03.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 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
|
|
Registrovaný: 27.01.10 Prihlásený: 15.02.23 Príspevky: 31 Témy: 12 | Napísal autor témy C1yde: 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
|
|
Registrovaný: 11.01.09 Prihlásený: 19.03.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | |
| Stránka: 1 z 1
| [ Príspevkov: 5 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| C, problem s osetrenim vstupu z klavesnice - char v Assembler, C, C++, Pascal, Java | 5 | 519 | 05.12.2011 14:07 t-pack25 | | C Int to Char v Assembler, C, C++, Pascal, Java | 2 | 322 | 20.10.2012 15:13 faraon | | testovanie prvku pola char [C++] v Assembler, C, C++, Pascal, Java | 6 | 474 | 06.07.2010 8:09 koso | | C - konverzia char na int v Assembler, C, C++, Pascal, Java | 14 | 677 | 02.04.2011 18:16 M4rek | | C: z getchar() do char *retazec v Assembler, C, C++, Pascal, Java | 9 | 989 | 08.10.2010 11:54 Blackshadow | | C/C++ problém so súbormi a hodnotami v Assembler, C, C++, Pascal, Java | 2 | 302 | 09.12.2012 10:43 nBXXL | | Problem C&C Generals v Počítačové hry | 20 | 1231 | 12.10.2007 21:09 Matokoko | | C&C: Rengade-problem v Počítačové hry | 0 | 523 | 21.04.2009 15:39 GothicMan | | C&C Generals problem v Počítačové hry | 2 | 639 | 16.01.2011 12:35 Luks | | delete char* v Assembler, C, C++, Pascal, Java | 4 | 409 | 17.11.2012 20:04 m4r14n | | Problem s teplotou? Speedfan Core- 4°C a Core 96°C v AMD - Advanced Micro Devices | 18 | 1214 | 08.05.2011 15:57 slavix | | odelenie num a char v PHP, ASP | 2 | 342 | 10.11.2009 20:22 pilná lama glama | | char pole do int v Assembler, C, C++, Pascal, Java | 0 | 350 | 19.01.2011 22:38 1daemon1 | | mer. char.zenerovej diody v Elektronika | 0 | 486 | 10.01.2012 20:34 p4tooo | | Banalny priklad-char. tranzistora v Elektronika | 10 | 1117 | 07.03.2007 12:43 Taomas | | Zmena char na int v Assembler, C, C++, Pascal, Java | 6 | 507 | 02.02.2012 23:18 street_punk |
| 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
|
|