Obsah fóra
PravidláRegistrovaťPrihlásenie




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

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 11.10.09
Prihlásený: 23.06.22
Príspevky: 289
Témy: 51
Bydlisko: Kysucké Nov...
Príspevok NapísalOffline : 02.12.2011 15:52

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
Offline

Užívateľ
Užívateľ
C, problem s osetrenim vstupu z klavesnice - char

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26
Bydlisko: Kesa
Príspevok NapísalOffline : 02.12.2011 18:17

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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 11.10.09
Prihlásený: 23.06.22
Príspevky: 289
Témy: 51
Bydlisko: Kysucké Nov...
Príspevok Napísal autor témyOffline : 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
Offline

Užívateľ
Užívateľ
C, problem s osetrenim vstupu z klavesnice - char

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26
Bydlisko: Kesa
Príspevok NapísalOffline : 03.12.2011 1:33

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
Offline

Skúsený užívateľ
Skúsený užívateľ
C, problem s osetrenim vstupu z klavesnice - char

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 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.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 11.10.09
Prihlásený: 23.06.22
Príspevky: 289
Témy: 51
Bydlisko: Kysucké Nov...
Príspevok Napísal autor témyOffline : 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
Odpovedať na tému [ Príspevkov: 6 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. 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 Zobrazenie posledných príspevkov

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

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

4

427

07.10.2012 18:52

Fico Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem 1 a 2 USB vstupu do notebooku

v Ostatné

2

619

18.12.2010 17:50

holubbn Zobrazenie posledných príspevkov

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

v Externé zariadenia

3

367

24.10.2019 10:04

Miso122 Zobrazenie posledných príspevkov

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

v Notebooky a netbooky

3

445

28.04.2010 8:27

Jaro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. problém u klávesnice lenovo ideapad u310

v Notebooky a netbooky

7

1222

17.02.2019 8:37

tatko Tom Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problém s numerickou časťou klávesnice NTB

v Notebooky a netbooky

2

238

27.02.2021 16:28

Idea Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problém so šípkami klávesnice Logitech K-300(Y-U0004)

v Externé zariadenia

4

326

28.10.2014 14:33

Mandy Zobrazenie posledných príspevkov

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

v Delphi, Visual Basic

22

639

12.12.2015 21:11

camarovk19 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

411

17.11.2012 20:04

m4r14n 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

347

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. mer. char.zenerovej diody

v Elektronika

0

489

10.01.2012 20:34

p4tooo 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

512

02.02.2012 23:18

street_punk 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

355

19.01.2011 22:38

1daemon1 Zobrazenie posledných príspevkov

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

v Smartfóny a tablety

2

307

30.03.2015 18:09

fackovectomas 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

328

20.10.2012 15:13

faraon 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