• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zabezpieczenie porgramu przed wysypaniem się.

Object Storage Arubacloud
+2 głosów
305 wizyt
pytanie zadane 6 kwietnia 2015 w C i C++ przez Nightv13 Użytkownik (850 p.)
Witam!

Mam do was dwa pytania: pierwsze to jak zabezpieczyć program przed wysypaniem sie gdy zamiast liczby wybierzemy jakąś litere w prostym programie konsolowym np kalkulator.

drugie pytanie to jak zrobić aby program nie czekał na na wciśniecie entera tylko odrazu po wybraniu np 1 z kalwiatury wykonał jakąś instrukcje np we switchu.

Z góry dziękuję za wszystkie wasze odpowiedzi i rady ;)

3 odpowiedzi

+6 głosów
odpowiedź 6 kwietnia 2015 przez Buby Pasjonat (19,590 p.)
wybrane 6 kwietnia 2015 przez Nightv13
 
Najlepsza

Pierwsze pytanie - istnieją metody std::cin.good() oraz std::cin.false(). Pierwsza metoda zwraca true, jeśli ostatnia operacja wproawdzania cin, wykonała się poprawnie. Analogicznie false zwraca true jeśli wykonała się źle. Oczywiście musimy też czyścić bufor błędu metodami std::cin.clear() oraz std::cin.sync().

Przykładowy kod:

/* jakis kod */
int x;
while( true )
{
std::cout << "Podaj liczbe:";
std::cin >> x;

if( std::cin.good() )
break;
else
{
std::cout << "Miales podac liczbe matolku!" << std::endl;
std::cin.clear();
std::cin.sync();
}

}

 

 

Odpowiedzią na drugie pytanie może być funkcja getch() z biblioteki conio.h

Przykładowe użycie:

#include<iostream>
#include<conio.h>
 
int main( void )
{
    int Klawisz;
 
    for( ; ; )
    {
        Klawisz = getch();
 
        switch( Klawisz )
        {
            case 72:
            std::cout << "Do gory!" << std::endl;
            break;
 
            case 80:
            std::cout << "W dol!" << std::endl;
            break;
 
            case 75:
            std::cout << "W lewo!" << std::endl;
            break;
 
            case 77:
            std::cout << "W prawo!" << std::endl;
            break;
        }
    }
 
    return 0;
}

 

 

Pozdrawiam! wink

komentarz 6 kwietnia 2015 przez Nightv13 Użytkownik (850 p.)
Dziękuje za odpowiedź tylko mam problem bo gdy próbuję wkleić 2 kod do CB aby potestować tą metode to kod mi sie nie kompiluje ;/ dlaczego ?
komentarz 6 kwietnia 2015 przez Buby Pasjonat (19,590 p.)

Coś więcej na temat błędu? Jakiego kompilatora używasz? Ja miałem taki przypadek w szkole, że VisualStudio nie miało biblioteki conio.h sad Sam używam Code::Blocks.

komentarz 6 kwietnia 2015 przez Nightv13 Użytkownik (850 p.)
używam Code::Blocks gdy uruchomię program wyskakuje mi konsola i nic nie moge dalej zrobić ;/
komentarz 6 kwietnia 2015 przez Buby Pasjonat (19,590 p.)

Bo masz wcisnac klawisze strzalek cheeky

Program jest napisany, aby w momencie wciskania strzalek wypisywal odpowiednio dla każdego kierunku inną instrukcję. Te liczby, to kod znaku ASCI. Wejdź na wikipedie, zobacz sobie jakie znaki maja kody i idź testuj! ;)

Btw. jesli pomogłem możesz dać mi najlepszą odpowiedź. :)

komentarz 6 kwietnia 2015 przez Nightv13 Użytkownik (850 p.)
No tak ;) nie wiedziałem ze się tak w ogóle da(jestem początkujący) dzięki wielkie za pomoc Pozdrawiam !
0 głosów
odpowiedź 6 kwietnia 2015 przez kocim Użytkownik (810 p.)
Witam, co do pierwszej części pytania - polecam poczytać o strumieniu wejściowym. Poniżej podaje link do przykładowej lekcji:

http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Obsluga-strumienia-wejsciowego/12
–1 głos
odpowiedź 6 kwietnia 2015 przez Matys Użytkownik (900 p.)

1.  

while ( !(cin >> wartosc) ) {
            cin.clear();                  // wyzerowanie flagi
            while ( cin.get() != '\n' )   // wyczyszczenie bufora wejściowego obiektu cin
                continue;
            cout << endl;
            cout << "Niepoprawna wartosc !\n" << i+1 << ". Wartosc: ";

2.

funkcja getch()
#include <conio.h>
int i = getch();

 

Podobne pytania

0 głosów
1 odpowiedź 471 wizyt
0 głosów
1 odpowiedź 326 wizyt
0 głosów
1 odpowiedź 76 wizyt
pytanie zadane 25 lutego 2017 w Sieci komputerowe, internet przez Śwież4k Bywalec (2,570 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...