[ROZWIĄZANE] kontrola znaków wprowadzanych z klawiatury

0

Cześć,
problem mój polega na weryfikacji danych z klawiatury, dokładniej: jak sprawdzić, co zostało kliknięte ?

#include <iostream.h>
#include <stdlib.h>
#include <ctype.h> //may need <ctype.h>

using namespace std;

int main()
{
    char number;
    do
     {
      cout << "Podaj cyfre: ";
      cin >> number;

      if(!isdigit(number))
       {
        cout << "Not a number " << endl;
       }
    }while(isdigit(number));

    system("pause");
    return 0;
}

Powyższy program sprawdza, czy wpisany znak jest cyfrą czy nie. Program działa poprawnie.

Chciałem go lekko zmodyfikować (czyli program miałby przyjmować tylko cyfry 1 lub 2 lub 3, żadnych liter) tak, by można było to sprawdzanie wykorzystać przy instrukcji switch, dokładniej ilustruje to poniższy kawałek kodu:

char s;   
  do
    {
     cout << "Wybierz opcje: \n";
     cout << "1. Opcja 1 \n";
     cout << "2. Opcja 2 \n";
     cout << "3. EXIT \n";
     cin >> s;
    }
   while (s != 1 && s != 2 && s != 3 && !isdigit(s));

Ta modyfikacja działała, ale nie do końca, bo nie mogłem wykorzystać w żadnej funkcji tej wybranej wartości z klawiatury s (chyba dlatego że to typ char ??)
Chciałem ten wybór zastosować do:

if (s == 1) cout << "Wybor 1";
else if (s == 2) cout << "Wybor 2";
else exit(1);

Ale w ogóle ten kawałek kodu nie został zauważony przez kompilator (jak wcześniej wspomniałem, dlatego że s to typ char ??)
Podobnie sytuacja ze switch:

switch(s)
{
case 1:
break;
case 2:
break;
case 3;
break;
default:
break;
}

Instrukacja switch nie działa...

Próbowałem rzutować typy oraz konwertować char na int, ale nie poskutkowało. Chodzi o to, żeby wybór, czyli s, mogło być używane do innych operacji (np if (s == 1) instrukcja).

Mam nadzieję że w miarę jasno opisałem problem.
Z góry dzięki za wskazówki.

0

Kontrola znaków 1 (sprawdzanie zmiennej):

#include <stdio.h>

int main(){
   
   double a;
   int retVal;
   char ch;

   printf("Podaj liczbe a:");
   retVal = scanf("%lf", &a);

   while (retVal != 1)
   {
      while((ch = getchar()) != '\n' && ch != EOF);
      printf("Podaj liczbę a ponownie:");
      retVal = scanf("%lf", &a);
   }

   return 0;
}

Kontrola znaków 2(sprawdzanie zmiennej przez funkcje):

long double funkcja()
{
long double tz;
    do
       {if (cin.fail())
                {cin.clear();
                    while (cin.peek() != '\n')
                    cin.get();
                }cin >> tz;
                if (cin.fail()) cout << "Blad, to nie jest liczba. Podaj wartosc jeszcze raz." << endl;
            }
    while (cin.fail());
    return tz;
}  

Sprawdzasz znaki przez funkcje:
znak=funkcja()

I jeszcze jedno:
http://lmgtfy.com/?q=c%2B%2B+sprawdzanie+czy+jest+liczb%C4%85

0

dzięki za pomoc,
btw świetna strona lmgtfy :D

ale do rzeczy: stworzyłem jeszcze inną weryfikację danych, oto ona:

int s;

start:
cout << "Wybierz opcje";
cin >> s;

if (cin.fail()) //kontrola wprowadzonego znaku
    {
     cin.clear();
     while(getchar() != '\n');
     cin.ignore();
     goto start;
    }

taki zapis uniemożliwia wpisanie znaku który nie jest typem Integer a także uniemożliwia wpisanie ciągu znaków typu Integer np 1111, 1213, 4534 oraz uniemożliwia wpisanie ciągu złych znaków, np aaa, abcd, itp, gdy się wpisze zły znak wtedy program cały czas pyta o znak.

1 użytkowników online, w tym zalogowanych: 0, gości: 1