logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak w C++ sprawdzić, czy wprowadzono tylko liczby całkowite?

Heroic 27 Maj 2005 21:13 7901 5
REKLAMA
  • #1 1529717
    Heroic
    Poziom 11  
    Posty: 28
    Jak najprościej zabezpieczyć program przed wprowadzaniem czegoś innego niż zwykłych liczb całkowitych (wielocyfrowych)? Wiem, że c zamienia literki na cyfry jeśli wprowadzimy np. "2nno9", ale tu chodzi o to, żeby w takim wypadku wyskoczył błąd i prośba o ponowne wprowadzenie.

    Pozdrawiam elektrodowych koderów :)
  • REKLAMA
  • #2 1529838
    Sam Sung
    Poziom 33  
    Posty: 2018
    Pomógł: 227
    Ocena: 597
    Podaj więcej szczegółów - sposób wczytywania liczb, kompilator. Wydaje mi się, że scanf("%d", &x) zgłosi błąd przy 2nno9. Jak miałby zamienić litery na cyfry?
  • REKLAMA
  • #3 1530097
    Heroic
    Poziom 11  
    Posty: 28
    Już się tłumaczę. Wynikiem takiego kodu:

    int c;
    cin>>c;
    cout<<c;

    jeśli wprowadzimy np. "rrt" będzie jakaś liczba (7995). Ja natomiast chcę, żeby program zwrócił błąd jeśli to będzie coś w stylu "rrt".
  • REKLAMA
  • #4 1530203
    Sam Sung
    Poziom 33  
    Posty: 2018
    Pomógł: 227
    Ocena: 597
    Poczytaj o klasach istream i spółka, tam są jakieś flagi błędów.
  • REKLAMA
  • #5 1530262
    łukanio85
    Poziom 2  
    Posty: 2
    Pisałem kiedyś taką funkcję która sprawdzała czy w nieskończonym ciągu znaków są same cyfry ewentualnie przecinek, jeśli nie działasz na nieskończonym ciągu to dobrze jest zadeklarować sobie jakąs tablice która będzie buforem np.

    #include <iostream>
    #include <ctype.h>

    using namespace std;

    int sprawdz(char* data)
    { int i;
    if(data == NULL) return 0;
    if (!isdigit(data[0])) // sprawdzamy czy pierwszy wprowadzony znak jest cyfra
    { return 0; }
    for (i=0; isdigit(data[i]);i++) { }
    // jesli tak to przeskakujemy znaki z bufora dopoki sa cyframi
    if (data[i]=='\0') return 1; // sprawdzamy czy po ostatniej cyfrze jest znak konca
    else return 0; // jesli nie blad

    }

    int main()
    {
    char bufor[20];
    char* wsk = bufor;
    cout<< "PODAJ: "<<endl;
    // pobierasz to co wprowadza użytkownik
    cin.getline(bufor,19);

    if (sprawdz(wsk)) cout << "super"<<endl;
    else cout << "niestety"<<endl;


    system("PAUSE");
    return 0;
    }


    ta funkcja sprawdz zwraca 0 jesli dane sa niepoprawne troche nieelegancko, jak chcesz możesz zmienic ;)
  • #6 1543522
    Konto nie istnieje
    Poziom 1  
REKLAMA