Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Autor | Správa |
---|
Registrovaný: 11.10.09 Prihlásený: 23.06.22 Príspevky: 289 Témy: 51 | 51 Bydlisko: Kysucké Nov... |
zdravim zase,
robim jednoduchy program pre operacie s maticami. Z uvodneho "menu" si uzivatel vyberie, ktoru operaciu chce urobit (riesene cez switch). Pre prvu operaciu zada cislo 1, pre druhu operaciu cislo 2. Chcem ale osetrit tento vstup. Ked deklarujem premennu "vyber" ako integer, vsetko funguje. Akurat iba ked sa zadaju cisla, ked uzivatel zada pismeno tak je zle nedobre . Preto deklarujem premennu "vyber" ako char. Tu mi ale tiez program bugguje ked uzivatel zada pismeno. Mohli by ste sa mi nato prosim pozriet?
Dakujem.
Nazorny zdrojak je tu:
Kód: #include <stdio.h> #include <conio.h> int main() { char vyber; do { printf("zadaj cislo 1 alebo 2: "); //vypise.... scanf ("%c", &vyber); if (vyber != '1' && vyber != '2') //ak je zadany iny znak ako '1' alebo '2', vypise upozornenie printf("\nzle !! Opakuj: \n"); } while (vyber != '1' && vyber != '2'); //opakuje moznost nacitania znaku, az kym neni zadany znak '1' alebo '2'
switch (vyber){ case '1': printf ("moznost 1\n"); //ak znak je '1', vypise... break;
case '2': printf ("moznost 2\n"); //ak je znak '2', vypise... break; }
getch(); return 0; }
_________________ cpu intel c2q9550, 2.83GHz @ 3.91 GHz gpu asus eah4890 hdti 1GD5 1Gb ddr5 pcx zakl.doska asus p5q e HDD samsung 1Tb sata2 32Mb ram a-data ddr2 4x2Gb 1066+MHz Extreme zdroj fortron everest 600w 80+ skrinka enermax staray blue monitor LG 23" LCD W2343T-PF 2ms FULL HD DVI reproduktory Creative T6100 5.1 |
|
Registrovaný: 09.04.11 Prihlásený: 11.01.14 Príspevky: 257 Témy: 26 | 26 Bydlisko: Kesa |
Takže môžeš to spraviť pomocou príkazu fflush(stdin);, ktorý sa nachádza v hlavičke # include<stdlib.h> .. Tento príkaz ti vymaže celý buffer, takže máš vždy čistý vstup.
Kód: #include <stdio.h> #include <conio.h> #include <stdlib.h>
int main() { char vyber; do { fflush(stdin); printf("zadaj cislo 1 alebo 2: "); //vypise.... scanf ("%c", &vyber); if (vyber != '1' && vyber != '2') //ak je zadany iny znak ako '1' alebo '2', vypise upozornenie printf("\nzle !! Opakuj: \n"); } while (vyber != '1' && vyber != '2'); //opakuje moznost nacitania znaku, az kym neni zadany znak '1' alebo '2'
switch (vyber){ case '1': printf ("moznost 1\n"); //ak znak je '1', vypise... break;
case '2': printf ("moznost 2\n"); //ak je znak '2', vypise... break; }
getch(); return 0; }
_________________ NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n |
|
Registrovaný: 11.10.09 Prihlásený: 23.06.22 Príspevky: 289 Témy: 51 | 51 Bydlisko: Kysucké Nov... |
diki moc, funguje to.
Mohol by si mi este prosim ta vysvetlit, preco je potrebne vymazat buffer?
_________________ cpu intel c2q9550, 2.83GHz @ 3.91 GHz gpu asus eah4890 hdti 1GD5 1Gb ddr5 pcx zakl.doska asus p5q e HDD samsung 1Tb sata2 32Mb ram a-data ddr2 4x2Gb 1066+MHz Extreme zdroj fortron everest 600w 80+ skrinka enermax staray blue monitor LG 23" LCD W2343T-PF 2ms FULL HD DVI reproduktory Creative T6100 5.1 |
|
Registrovaný: 09.04.11 Prihlásený: 11.01.14 Príspevky: 257 Témy: 26 | 26 Bydlisko: Kesa |
No pokúsim sa. Buffer je to, keď zadávaš z klávesnice znaky a oni sa ti ukladajú do bufra, čo je taká medzipamäť alebo ako to nazvať. Keď zadáš nežiaduci znak (prípadne viac znakov), tak sa ti vyhodnoti podmienka, ale ten znak/znaky ti zostanú v buferi/zásobníku. V tvojom prípade, keď zadáš pismeno, tak sa ti podmienka nevyhodnotí a ten znak ti zostane v bufri, takže ti to vyhodí 2krát. Takto to chápem ja. Ale každý pochopí danú vec inak, tak najlepšia rada je google a pohladaj si o funkcii fflush(stdin) dačo viac
_________________ NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n |
|
Registrovaný: 11.01.09 Prihlásený: 17.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
street_punk píše: V tvojom prípade, keď zadáš pismeno, tak sa ti podmienka nevyhodnotí a ten znak ti zostane v bufri, takže ti to vyhodí 2krát.
Len ta troska poopravim - podmienka sa sice nevyhodnoti, ale znak sa z buffra vyberie ( to nema s podmienkou absolutne nic spolocne ). Ten druhy znak je enter.
|
|
Registrovaný: 11.10.09 Prihlásený: 23.06.22 Príspevky: 289 Témy: 51 | 51 Bydlisko: Kysucké Nov... |
uz chapem, diki moc
_________________ cpu intel c2q9550, 2.83GHz @ 3.91 GHz gpu asus eah4890 hdti 1GD5 1Gb ddr5 pcx zakl.doska asus p5q e HDD samsung 1Tb sata2 32Mb ram a-data ddr2 4x2Gb 1066+MHz Extreme zdroj fortron everest 600w 80+ skrinka enermax staray blue monitor LG 23" LCD W2343T-PF 2ms FULL HD DVI reproduktory Creative T6100 5.1 |
|
Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Novinky | 0 | 400 | 29.12.2017 12:45 patro16 | | v Assembler, C, C++, Pascal, Java | 4 | 461 | 07.10.2012 18:52 Fico | | v Ostatné | 2 | 647 | 18.12.2010 17:50 holubbn | | v Externé zariadenia | 3 | 401 | 24.10.2019 10:04 Miso122 | | v Notebooky a netbooky | 3 | 479 | 28.04.2010 8:27 Jaro | | v Notebooky a netbooky | 2 | 281 | 27.02.2021 16:28 Idea | | v Notebooky a netbooky | 7 | 1287 | 17.02.2019 8:37 tatko Tom | | v Externé zariadenia | 4 | 365 | 28.10.2014 14:33 Mandy | | v Assembler, C, C++, Pascal, Java | 4 | 450 | 17.11.2012 20:04 m4r14n | | v Delphi, Visual Basic | 22 | 676 | 12.12.2015 21:11 camarovk19 | | v Elektronika | 0 | 524 | 10.01.2012 20:34 p4tooo | | v Assembler, C, C++, Pascal, Java | 6 | 545 | 02.02.2012 23:18 street_punk | | v Assembler, C, C++, Pascal, Java | 0 | 382 | 19.01.2011 22:38 1daemon1 | | v Assembler, C, C++, Pascal, Java | 2 | 358 | 20.10.2012 15:13 faraon | | v Elektronika | 10 | 1167 | 07.03.2007 12:43 Taomas | | v Smartfóny a tablety | 2 | 340 | 30.03.2015 18:09 fackovectomas |
|