[c++]Sprawdzenie czy wpisana została liczba

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Stage9
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 21 paź 2007, 21:13
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Brak

[c++]Sprawdzenie czy wpisana została liczba

Post autor: Stage9 »

Witam
Jako, że chodzę na mat-inf do LO, dostaliśmy zadania z informatyki. Uczymy się TP, jednak ja w niego zwątpiłem i staram się zastępować go przez cpp. Uczę się z Symfonii C++ Jurka Grębosza,co nie zmienia faktu, że jestem początkujący. Jednak ostatnio nie mam czasu zbytnio na to.

Jak sprawdzić czy wpisana wartość jest liczbą, nie chodzi mi tu o jej wypisanie, tylko, o to aby program, przy użyciu instrukcji if przechodził do odpowiedniej części kodu, lub wywalał, że wpisaliśmy literę. Ułożyć instrukcję umiem, tylko nie umiem ułożyć warunku na sprawdzenie.
Awatar użytkownika
Opalo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 113
Rejestracja: 07 sty 2009, 09:52
Płeć: Mężczyzna

Odp: [c++]Sprawdzenie czy wpisana została liczba

Post autor: Opalo »

Ja sie na cpp nie znam, ale mozesz skorzystac z wyrazen regularnych. Liczba to bedzie cos takiego [\\d]+ (ale nie jestem pewien co do notacji cpp). Druga opcja to zalozenie, ze zostala wprowadzona liczba i dalsze wykonywanie dzialan. Jesli po drodze okaze sie, ze wprowadzona zmienna nie byla liczba, wystarczy przechwycic rzucony wyjatek i odpowiedno go obsluzyc. To tak w ogolnym zarysie :) Kodu nie podrzuce bo cpp to nie moja dzialka.

EDIT:
Wlasnie! Zapomnialem o funkcji isDigit(). Tu masz dokladnie to o co pytasz.
kklimonda
Zakręcona Traszka
Zakręcona Traszka
Posty: 585
Rejestracja: 20 kwie 2008, 04:21
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME

Odp: [c++]Sprawdzenie czy wpisana została liczba

Post autor: kklimonda »

Zainteresuj się funkcją std::isdigit()

PS. nie korzystaj z gotowców i nie proś o gotowe rozwiązania bo się nie nauczysz niczego :)
Awatar użytkownika
Szmitas
Zakręcona Traszka
Zakręcona Traszka
Posty: 572
Rejestracja: 28 lis 2006, 17:38
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Unity
Architektura: x86
Lokalizacja: Luboń
Kontakt:

Odp: [c++]Sprawdzenie czy wpisana została liczba

Post autor: Szmitas »

A coś takiego nie może być?

Kod: Zaznacz cały

int a;
if(cin>>a) instrukcje;
else instrukcje;
www.ubuntu-pomoc.org - tutaj znajdziesz rozwiązanie każdego Twojego problemu.

Chcesz zostać Redaktorem ubuntu-pomoc.org? Skontaktuj się ze mną!
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [c++]Sprawdzenie czy wpisana została liczba

Post autor: beluosus »

Jedziesz cały string i sprawdzasz każdy znak z osobna czy nie jest cyfrą. Jeśli nie jest to zwracasz false i do widzenia.

Kod: Zaznacz cały

#include <iostream>
#include <cstring>

using namespace std;

bool isint(string s)
{
    for (unsigned int i = 0; i < s.length(); i++)
        if (!isdigit(s[i]))
            return false;

    return true;
}

int main(int argc, char** argv)
{
    string s = "12345678";
    cout << s << "\t";
    isint(s) ? cout << "Liczba\n" : cout << "Nie liczba\n";
    
    s = "1234a5678";
    cout << s << "\t";
    isint(s) ? cout << "Liczba\n" : cout << "Nie liczba\n";
    
	return 0;
}
EDIT:
Oj, gafa w kodzie była. ;)
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
kklimonda
Zakręcona Traszka
Zakręcona Traszka
Posty: 585
Rejestracja: 20 kwie 2008, 04:21
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME

Odp: [c++]Sprawdzenie czy wpisana została liczba

Post autor: kklimonda »

@Szmitas: Twoje rozwiązanie też jest dobre - wychodzi tutaj moje wychowanie na C, że o tym nie pamiętałem. Osobiście jednak akurat taki zapis mi się nie podoba - zwyczajnie dlatego, że nie wiem za bardzo jak to działa :). Wolałbym skorzystać z cin.fail().
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [c++]Sprawdzenie czy wpisana została liczba

Post autor: el.pescado »

Można też ręcznie napisać funkcję sparawdzającą - jest to dobre ćwiczenie. Trzeba pamiętać, że kolejne cyfry w zestawie znaków ASCII mają kolejne kody, oraz że kody znaków można ze sobą porównywać (są uporządkowane):

Kod: Zaznacz cały

int isdigit(char c) {
    if (c >= '0' && c <= '9')
        return 1;
    else
        return 0;
}
Albo krócej, biorąc pod uwagę, że można zwrócić warunku jako wartość logiczną:

Kod: Zaznacz cały

int isdigit(char c) {
    return (c >= '0' && c <= '9');
}
Można też użyć instrukcji switch etc...
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 17 gości