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

question-closed Sprawdz czy to liczba C++

VPS Starter Arubacloud
0 głosów
5,803 wizyt
pytanie zadane 3 grudnia 2016 w C i C++ przez qlucha Obywatel (1,790 p.)
zamknięte 4 grudnia 2016 przez qlucha
Kod
string cos_z_klawiatury;
bool zlaopcja;
 
 //CZY TO LICZBA?
        zlaopcja=false;
        for(int i=0; i<cos_z_klawiatury.length(); i++)
        {
            if ((cos_z_klawiatury[i]<48)||(cos_z_klawiatury[i]>57)) zlaopcja=true;
 //SPRAWDZ KODY W TABLICY ASCII - CZY TO NA PEWNO SAME CYFRY (48-57)?
        }
        if (zlaopcja==false) wybor_w_menu=atoi(cos_z_klawiatury.c_str());

 


Witam znalazlem kod do walidacji danych wejsciowych który sprawdza czy 
zapisana wartosc w zmiennej to napewno liczba , 
jest tutaj zapis 
//SPRAWDZ KODY W TABLICY ASCII - CZY TO NA PEWNO SAME CYFRY (48-57)?

przyznam szczerze że sie pogubiłem i nie rozumiem jak 
ten warunek funkcji if porownuje sie z danymi zapisanymi w tablicach ASCII
if ((cos_z_klawiatury[i]<48)||(cos_z_klawiatury[i]>57)) zlaopcja=true;
 

 

Mam nadzieje że moje pytanie jest zrozumiałe, dzieki za cierpliwosc 
(ucze sie dopier :))winkyes

 

komentarz zamknięcia: problem rozwiazany

2 odpowiedzi

+2 głosów
odpowiedź 3 grudnia 2016 przez jegor377 Stary wyjadacz (13,230 p.)
bool isNumber(string text) {

    for(int i = 0; i < text.length(); i++) if(text[i]>'9' || text[i]<'0') return false;

    return true;

}



To powinno działać. ;)

komentarz 3 grudnia 2016 przez qlucha Obywatel (1,790 p.)
czy jestes wstanie ocenic czy ten kod u góry jest poprawny???
komentarz 3 grudnia 2016 przez qlucha Obywatel (1,790 p.)
string liczba=5; //lub wpisana z klawiatury
równa sie zapis w RAM o index[0] = 0011 0101 //liczba binarna
zapis kodu dziesietnego w ASCII = 53    

To zapis tej samej liczby 5 w informatyce ,

W jaki sposób C++ konwertuje lub porównuje liczbe 5 do

// wpisana z klawiatuy
 if ((liczba[i]<48)||(liczba[i]>57)) zlaopcja=true;

 //SPRAWDZ KODY W TABLICY ASCII - CZY TO NA PEWNO SAME CYFRY (48-57)?

 

??????
komentarz 4 grudnia 2016 przez jegor377 Stary wyjadacz (13,230 p.)
pewex, sam taki kiedyś używałem. Poza tym C++ zapisuje te znaki w postaci cyfr, więc jeżeli podasz mu coś między pojedynczymi quotes to on to binarnie zapisze jako cyrfę. Zero jest pierwsze w ascii, a dziewięć jest ostatnie z cyrf, więc potrzebujemy liczbę z przedziału od kodu '0' do kodu cyfry '9'. ;)
komentarz 4 grudnia 2016 przez jegor377 Stary wyjadacz (13,230 p.)
ten kod co ty podałeś jest niepoprawny i się nawet nie powinien skompilować, a jeżeli już nawet się skompiluje, to jeżeli chciałbyś wpisać "liczba" na ekranie, to wtedy program Ci crashnie po pewnej chwili pokazywania jakiś bzdur. ;)
0 głosów
odpowiedź 3 grudnia 2016 przez Predo Bywalec (2,260 p.)
W tej instrukcji if sprawdzany jest kod ASCII aktualnie przetwarzanego znaku przez pętle for. W tablicy ASCII kody od 48 do 57 to cyfry od 0 do 9.
komentarz 3 grudnia 2016 przez qlucha Obywatel (1,790 p.)
to to ja wiem tylko staram sie zrozumiec koncowa faze spelnienia tego warunku

 for(int i=0; i<cos_z_klawiatury.length(); i++)

if ((cos_z_klawiatury[i]<48)||(cos_z_klawiatury[i]>57)) zlaopcja=true;

 

jesli wpiszemy z klawiatury liczbe np 5 to  

cos_z_klawiatury.length() = 1    i dla tej wartosci petla wykona sie raz dla

cos_z_klawiatury[i]   zostanie zamienione na

 if ((5<48) || (5>57))  5 jest mniejsze od 48 czyli warunek jest prawdziwy i instrukcja

zlaopcja=true; sie wykona ,

CZY JA DOBRZE MYSLE CZY COS POMINOŁEM LUB CZEGO NIE ROZUMIE ???
komentarz 3 grudnia 2016 przez qlucha Obywatel (1,790 p.)
ROZWINE TEMAT O CO MI CHODZI ,

WIEM ZE W PAMIECI RAM LICZBA 5 WPISANA DO ZMIENNEJ Z KLAWIATURY

JEST PRZECHOWYWANA W  string zmiennej[0] o index'sie 0 ,

tak zwanej szufladce ram w postaci liczby binarnej jako 0011 0101  

co jest równoznacze jako zapis w  8-bitowych bajtach ;

nastepnie ten zapis binarny 0011 0101  po konwersji na liczby dziesietne =  53

cały czas jest to liczba wprowadzona z klawiatury jako 5 ,

KIEDY KOD Z C++ I W KTÓRYM MOMENCIE  ZAMIENIA MI LICZBE 5 NA

LICZBE DZIESIĘTNĄ  ZEBY PORÓWNAC JA W WARUNKU FUNKCJI IF

WARUNKOWEJ  if ((cos_z_klawiatury[i]<48)||(cos_z_klawiatury[i]>57))

MAM nadzieje ze nie odleciałem na orbite kosmosu i ktos mnie oświeci dzieki.

(jesli gdzies popelniłem bląd prosiłbym o wyrozumiałosć i zrozumienie ciagle sie ucze)
komentarz 3 grudnia 2016 przez Kodeman Gaduła (4,480 p.)
Sam średnio zrozumiałem, ale jeśli wstawisz liczbę 5, to cos_z_klawiatury[i] nie będzie równe 5. Raz się wykona dla cos_z_klawiatury[0] (bo tylko jeden element tablicy), a wartosc tej zmienne będzie równa 53, ponieważ jest to widziane jako znak ASCII.
komentarz 3 grudnia 2016 przez qlucha Obywatel (1,790 p.)
napisałeś " wartosc tej zmienne będzie równa 53"

i oto mi chodzi  ,  w jaki sposób dokładnie sie to odbywa

bo po wywołaniu

cout<<liczba[0]; w konsoli wyswietli nam liczbe

5   

w ramie jest przechowywana jako zapis binarny ,

a kiedy C++ konwertuje nam i skad wie kiedy zkonwertowac liczbe 5 na zapis dziesietny z

tabeli ASCII

Podobne pytania

0 głosów
3 odpowiedzi 1,533 wizyt
pytanie zadane 21 października 2019 w C i C++ przez Maciek Zębala Nowicjusz (140 p.)
0 głosów
1 odpowiedź 669 wizyt
0 głosów
2 odpowiedzi 201 wizyt
pytanie zadane 23 stycznia 2018 w PHP przez Adrian Marketon Nowicjusz (210 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...