| | |
| 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 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 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 Bydlisko: Kysucké Nov... | Napísal autor témy t-pack25: 02.12.2011 23:55 | |
|
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 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ý: 18.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 03.12.2011 11:58 | |
|
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 Bydlisko: Kysucké Nov... | Napísal autor témy t-pack25: 05.12.2011 14:07 | |
|
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 |
---|
| Moderní počítače mají problém se zpožděním vstupu klávesnice v Novinky | 0 | 357 | 29.12.2017 12:45 patro16 | | C++ problem s char v Assembler, C, C++, Pascal, Java | 4 | 427 | 07.10.2012 18:52 Fico | | Problem 1 a 2 USB vstupu do notebooku v Ostatné | 2 | 619 | 18.12.2010 17:50 holubbn | | problem s nastavenim klavesnice v Externé zariadenia | 3 | 367 | 24.10.2019 10:04 Miso122 | | Problem klavesnice na LENOVO N500 v Notebooky a netbooky | 3 | 445 | 28.04.2010 8:27 Jaro | | problém u klávesnice lenovo ideapad u310 v Notebooky a netbooky | 7 | 1222 | 17.02.2019 8:37 tatko Tom | | Problém s numerickou časťou klávesnice NTB v Notebooky a netbooky | 2 | 238 | 27.02.2021 16:28 Idea | | Problém so šípkami klávesnice Logitech K-300(Y-U0004) v Externé zariadenia | 4 | 326 | 28.10.2014 14:33 Mandy | | ošetrenie vstupu v Delphi, Visual Basic | 22 | 639 | 12.12.2015 21:11 camarovk19 | | delete char* v Assembler, C, C++, Pascal, Java | 4 | 411 | 17.11.2012 20:04 m4r14n | | odelenie num a char v PHP, ASP | 2 | 347 | 10.11.2009 20:22 pilná lama glama | | mer. char.zenerovej diody v Elektronika | 0 | 489 | 10.01.2012 20:34 p4tooo | | Zmena char na int v Assembler, C, C++, Pascal, Java | 6 | 512 | 02.02.2012 23:18 street_punk | | char pole do int v Assembler, C, C++, Pascal, Java | 0 | 355 | 19.01.2011 22:38 1daemon1 | | Vymena vstupu na jack v Smartfóny a tablety | 2 | 307 | 30.03.2015 18:09 fackovectomas | | C Int to Char v Assembler, C, C++, Pascal, Java | 2 | 328 | 20.10.2012 15:13 faraon |
| 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
|
|