c++ ošetrenie voči znakom

C,C++,C#

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
Keys1
Okoloidúci
Okoloidúci
Príspevky: 31
Dátum registrácie: 15 Feb 2012, 17:28
Bydlisko: Žilina
Vek: 31

c++ ošetrenie voči znakom

Príspevok od používateľa Keys1 » 14 Máj 2013, 15:08

Zdravím, chcel by som sa opýtať na vec, na ktorú nemôžem prísť. Určite to viete a je to jedna zo základnych vecii 'blbuvzdornosti' programu. Jedna sa o chybné zadane vstupy z klávesnice. Chcem ošetriť program aby sa dali zadávať iba čísla... V Cečku som to robil takto a išlo to ale neviem ako to spraviť v C++ aj keď som to prerobil na cout , cin ..

Kód: Vybrať všetko

if (scanf("%d",&menu) != 1)
{
printf("\n\nZadali ste nespravnu polozku\n\n");
return 0;
}
alebo neviete inu možnosť aby mi program bral len integer? napr hodiť to do tohto zakladneho programu na do-while switch-default

Kód: Vybrať všetko

#include <stdio.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

int main()

{
char tlacidlo;
int volba;
    do{

    cout<<"Vyber volbu 1,2 alebo 3: ";
    cout<<"\n";
    cin>>volba;
    switch (volba)
    {
    case 1:
        cout<<"\nVybral si volbu 1 \n";
        break;
    case 2:
        cout<<"\nVybral si volbu 2 \n";
        break;
    case 3:
        cout<<"\nVybral si volbu 3 \n";
        break;
    default:
        cout<<"\nVybral si zlu volbu\n";
    }


cout<<"\nOpakovat? a/n \n";
cin>>tlacidlo;
}
while((tlacidlo=='a') || (tlacidlo=='A')); // cyklus pre opakovaie

    return 0;
}
vopred ďakujem.
0

Používateľov profilový obrázok
sakraforte
Stály člen
Stály člen
Príspevky: 415
Dátum registrácie: 29 Júl 2011, 00:00

Re: c++ ošetrenie voči znakom

Príspevok od používateľa sakraforte » 14 Máj 2013, 15:14

čo tak testovať ascii hodnotu prijatého znaku, či je v rozsahu čísel
0

Používateľov profilový obrázok
Keys1
Okoloidúci
Okoloidúci
Príspevky: 31
Dátum registrácie: 15 Feb 2012, 17:28
Bydlisko: Žilina
Vek: 31

Re: c++ ošetrenie voči znakom

Príspevok od používateľa Keys1 » 14 Máj 2013, 15:20

sakraforte napísal:čo tak testovať ascii hodnotu prijatého znaku, či je v rozsahu čísel
už som na to prišiel. Spravil som to takto aj keď to nieje uplne dokonale (ak zadate 6sfsfgdfg tak zoberie čislo 6 ale to je myslím detail ktorý nebude zaujímať ľudí ktorým budem dávať kontrolovať prácu)

Kód: Vybrať všetko

#include <iostream>
#include <algorithm>
#include <string>
#include <sstream>
#include <string>

using namespace std;

int main()
{
string pom;
int cislo;
do
{
cout<<"Zadajte cislo od 0 do 100!"<<endl;
cin>>pom;
istringstream vymen(pom);
vymen>>cislo;
}
while(cislo<0 || cislo>100);
cout<<"cislo je: "<<cislo<<endl;
return 0;
}
0

Používateľov profilový obrázok
sakraforte
Stály člen
Stály člen
Príspevky: 415
Dátum registrácie: 29 Júl 2011, 00:00

Re: c++ ošetrenie voči znakom

Príspevok od používateľa sakraforte » 14 Máj 2013, 15:32

a čo vstup 50h alebo 10101b
0

MiloPS3
Stály člen
Stály člen
Príspevky: 480
Dátum registrácie: 20 Apr 2011, 00:00
Bydlisko: Lazne Kynzvart / CZ

Re: c++ ošetrenie voči znakom

Príspevok od používateľa MiloPS3 » 14 Máj 2013, 17:40

cau, ja sem to resil podobne ...
kon:
cout << "Zadejte hodnotu kontrastu v rozmezi 128-255\n";
cin >> con;
if (!(0x80 <= con && con <= 0xff))
{
cout << "neplatna hodnota !"<< "\n"; goto kon;
}
0

Používateľov profilový obrázok
boban
Stály člen
Stály člen
Príspevky: 137
Dátum registrácie: 03 Jún 2010, 00:00
Bydlisko: po

Re: c++ ošetrenie voči znakom

Príspevok od používateľa boban » 14 Máj 2013, 18:45

spravne by to malo byt osetrene takto:
http://www.cplusplus.com/reference/ios/ios/fail/

cize sa spytas na cin.good() ak vrati false je vstup nespravny.
http://www.cplusplus.com/reference/ios/ios/good/

pri opatovnom nacitani musis chybu vynulovat cin.clear()...popripade aj buffer.
0

Napísať odpoveď