Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
|
Forum - Polski Portal COLOBOTa |
|
|
Jak sprawdzić czy użytkownik wpisał liczbę |
Autor |
Wiadomość |
Simbax
Mod
Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy Wiek: 22 Dołączył: 07 Sie 2009 Posty: 473 Skąd: z Leszna
|
Wysłany: 13-12-2010, 21:09 Jak sprawdzić czy użytkownik wpisał liczbę
|
|
|
Równie dobrze mógłbym zapytać o to google, ale pytam się Was, żeby zwiększyć aktywność na forum.
Powiedzmy, że mamy prosty kalkulator i prosimy użytkownika o wprowadzenie liczby. Np.
Kod: | Witaj w prostym kalkulatorze!
Podaj pierwszą liczbę: _ |
Przypuśćmy, że użytkownik wpisze, choćby przez przypadek, literkę, tekst i ogólnie wszystko co nie jest liczbą. Na początku nie widać błędu, ale przy próbie odczytania tej zmiennej np. o typie int do której wprowadzono tekst program zaczyna się sypać...
I tu moje pytanie: w jaki sposób sprawdzić czy wprowadzona wartość jest zgodna z typem zmiennej? Myślałem, żeby pobawić się trochę string-ami i konwertowaniem na int-y, ale byłoby to trochę przekombinowane, przynajmniej tak mi się wydaje (w tym programie do pokazywania liczby w różnych systemach liczbowych właśnie takie coś zastosowałem i teraz trudno mi się w tym połapać... przy okazji, dodałem źródło ). Może istnieje jakaś specjalnie do tego celu stworzona funkcja? |
_________________ http://projektsimbax.blogspot.com/ <- Taki sobie blog |
|
|
|
|
Berserker
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 13-12-2010, 21:24
|
|
|
Jesli lubisz kombinowac:
Wczytujesz po kolei kazda cyfre liczby za pomoca cin.get().
Sprawdzasz czy nalezy do przedzialu 0-9
Jesli tak to wykonujesz magiczne operacje arytmetyczne w celu zapisania jej jako kolejnej cyfry wczytywanej liczby
Jesli nie, to sprawdzasz czy to nie jest znak nowej linii
Jesli nie, to kazesz uzytkownikowi spie... kupic se spadochron.
Jesli tak to konczysz wczytywanie liczby
Mozesz rozszerzyc o wczytywanie ujemnych liczb lub zmiennoprzecinkowych
Oczywiscie zaraz adiblol skrytykuje moj pomysl bedacy efektem rocznej nauki C++, ale on wie lepiej
Mozesz tez sie ludzic, ze jesli wystapi niezgodnosc typow w strumieniu to cin rzuca wyjatek i go poszukac, w takim razie zycze powodzenia. |
_________________
|
|
|
|
|
adiblol
Administrator forum FLOSS FTW!
Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy Dołączył: 21 Kwi 2008 Posty: 1313 Skąd: pokój odsłuchowy
|
Wysłany: 14-12-2010, 15:45
|
|
|
Tak to koncepcyjnie wygląda. ILEŚTAM to oczywiście stała lub makro
Kod: | char s[ILEŚTAM];
cin >> s;
bool isnum=true;
for (int sn=0;sn<ILEŚTAM;sn++) {
char &cn = s[sn];
if (cn==0) { podziekuj_uzytkownikowi(W_NAGRODE_ZA_WPROWADZENIE_LICZBY); oblicz_co_tam_chcesz(); break; }
if (!isdigit(cn)) { poraz_uzytkownika_pradem(ZA_KARE_ZE_NIE_WPROWADZIL_LICZBY); break; }
} |
Po objaśnienia odsyłam na Wikibooks. |
_________________ 1Tbps Project && Telecomix Network
|
|
|
|
|
Simbax
Mod
Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy Wiek: 22 Dołączył: 07 Sie 2009 Posty: 473 Skąd: z Leszna
|
Wysłany: 14-12-2010, 17:12
|
|
|
O, dzięki Tylko takie małe pytanko, co robi znak &: "char &cn = s[sn]; " ? |
_________________ http://projektsimbax.blogspot.com/ <- Taki sobie blog |
|
|
|
|
adiblol
Administrator forum FLOSS FTW!
Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy Dołączył: 21 Kwi 2008 Posty: 1313 Skąd: pokój odsłuchowy
|
Wysłany: 14-12-2010, 19:14
|
|
|
W tym przypadku nie jest konieczny i tylko poprawia wydajność.
Oznacza on referencję, tzn. zamiast tworzyć nową zmienną jest odwołaniem do istniejącej.
Ma to znaczenie przy zapisie:
Kod: |
int x = 666;
int y = x;
y = 1337;
cout << x << endl << y << endl;
|
wypisze:
Kod: |
int x = 666;
int &y = x;
y = 1337;
cout << x << endl << y << endl;
|
wypisze: |
_________________ 1Tbps Project && Telecomix Network
|
|
|
|
|
Simbax
Mod
Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy Wiek: 22 Dołączył: 07 Sie 2009 Posty: 473 Skąd: z Leszna
|
Wysłany: 29-05-2011, 13:48
|
|
|
Znalazłem fajny sposób na to na pewnym forum, lekko przerobione pod funkcję:
http://wklej.org/id/537138/
Myślę, że to najprostsze i najlepsze rozwiązanie Co prawda może być problem z uzyskaniem wartości jaką wpisał użytkownik, ale cóż... ]:> |
_________________ http://projektsimbax.blogspot.com/ <- Taki sobie blog |
|
|
|
|
adiblol
Administrator forum FLOSS FTW!
Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy Dołączył: 21 Kwi 2008 Posty: 1313 Skąd: pokój odsłuchowy
|
Wysłany: 30-05-2011, 16:27
|
|
|
Przypomniało mi się o funkcji scanf:
Kod: |
int liczba;
puts("Podaj pierwsza liczbe: ");
if (scanf("%i", &liczba)==1) dobrze_i_masz_liczbe_w_zmiennej; else źle;
|
|
_________________ 1Tbps Project && Telecomix Network
|
|
|
|
|
|
|
| |
|
|
|
|
Polski Portal COLOBOTa © 2008 - 2012 |
|
|