Sprawdzenie poprawności danych

Wprowadzanie danych wymaga ich poprawności dzięki czemu jesteśmy zabezpieczeni przez nieoczekiwanym przerwaniu programu. Jednym najprostszym sposobem ma sprawdzenie danych jest użycie

pętli

do {

cout<<"Podaj a większe lub równe zero=";

cin>>a;

} while(a<0);

Pętla nie pozwoli wprowadzić liczb ujemnych.

 

Innym sposobem kiedy wprowadzamy do zmiennej ciąg znaków inny niż całkowity po wykonaniu pewnych operacji program ulega przerwaniu bo wprowadzony ciąg traktuje jako liczbą 0. Pomóc może nam wczytanie danej wejściowej do  zmiennej łańcuchowej a następnie  jej zamiana na typ liczbowy, np.:

strtol() -Konwertuje wartość zapisaną w łańcuchu znaków w dowolnym systemie liczbowym do postaci liczby typu całkowitego (long).

Argumenty

Argument Opis
const char * start Łańcuch znaków, który ma zostać przekonwertowany do postaci liczbowej.
char ** end Argument wyjściowy do którego zostanie zapisany adres pierwszego znaku, którego nie udało się przekonwertować. Funkcja zignoruje znaczenie argumentu w przypadku gdy jego wartość zostanie ustawiona na NULL.
int base System liczbowy w którym zapisana jest wartość w łańcuchu znaków. Wartość argumentu musi mieścić się w przedziale od 2 do 36. W przypadku gdy wartość niniejszego argumentu wynosi 0 – funkcja wykrywa rodzaj stosowanego systemu liczbowego. Więcej informacji na temat automatycznego wykrywania systemu liczbowego w dalszej części dokumentu.

#include<iostream>
#include <cstdlib>
using namespace std;

int main()
{  

  char bin[100];
    cout<<"Podaj liczbe w systemie binarnym=";
    cin>>bin;
    char *wKoniec;
    long iBin = strtol( bin, & wKoniec, 2 );
    cout<<iBin<<endl;
    
    system("pause");

}

lub

#include<iostream>
#include <cstdlib>
using namespace std;

int main()
{

char hex[100];
cout<<„Podaj liczbe w systemie sesnastkowym=”;
cin>>hex;
char *wKoniec1;
long iDec = strtol( hex, & wKoniec1, 16 );
cout<<iDec<<endl;

}

inne to:

strtoul() – Konwertuje wartość zapisaną w łańcuchu znaków w dowolnym systemie liczbowym do postaci liczby typu całkowitego (unsigned long).

Argumenty

Argument Opis
const char * start Łańcuch znaków, który ma zostać przekonwertowany do postaci liczbowej.
char ** end Argument wyjściowy do którego zostanie zapisany adres pierwszego znaku, którego nie udało się przekonwertować. Funkcja zignoruje znaczenie argumentu w przypadku gdy jego wartość zostanie ustawiona na NULL.
int base System liczbowy w którym zapisana jest wartość w łańcuchu znaków. Wartość argumentu musi mieścić się w przedziale od 2 do 36. W przypadku gdy wartość niniejszego argumentu wynosi 0 – funkcja wykrywa rodzaj stosowanego systemu liczbowego. Więcej informacji na temat automatycznego wykrywania systemu liczbowego w dalszej części dokumentu.

strtod() – Konwertuje wartość zapisaną w łańcuchu znaków do postaci liczby zmiennoprzecinkowej (double).

więcej o strtod()