Reklama
Pokazuje wyniki od 1 do 15 z 15

Temat: [C]Jak sprawdzić czy podano liczbę całkowitą?

  1. #1
    Avatar Rzulf
    Data rejestracji
    2009
    Posty
    481
    Siła reputacji
    16

    Domyślny [C]Jak sprawdzić czy podano liczbę całkowitą?

    Tak jak w nazwie tematu. Mam taki kod:
    Kod :
    double liczba;
    scanf("%lf", &liczba);
    if(floor(liczba)-liczba==0){
    printf("to liczba calkowita");
    } else {
    printf("to nie liczba calkowita");
    }
    Niestety visual studio odmawia posłuszeństwa, więc nie mogę sprawdzić czy dobrze działa. Jest dobrze/źle albo macie jakieś lepsze/prostsze sposoby?

  2. #2
    Avatar Rollercoster
    Data rejestracji
    2011
    Wiek
    30
    Posty
    1,247
    Siła reputacji
    15

    Domyślny

    if(liczba%1==liczba) ??

  3. #3
    Avatar bercik
    Data rejestracji
    2005
    Położenie
    Rojca
    Wiek
    36
    Posty
    421
    Siła reputacji
    21

    Domyślny

    if(liczba == static_cast<int>(liczba))

  4. Reklama
  5. #4
    Avatar Rzulf
    Data rejestracji
    2009
    Posty
    481
    Siła reputacji
    16

    Domyślny

    Cytuj Rollercoster napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    if(liczba%1==liczba) ??
    Jak reszta z dzielenia liczby przez 1 może dać tą liczbę?
    Cytuj bercik napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    if(liczba == static_cast<int>(liczba))
    Chodzi mi o jakiś prosty sposób, dopiero zaczęliśmy programowanie i coś takiego nie przejdzie.

  6. #5
    Avatar Rollercoster
    Data rejestracji
    2011
    Wiek
    30
    Posty
    1,247
    Siła reputacji
    15

    Domyślny

    Chodziło mi o liczba%1==0 :)

  7. #6

    Data rejestracji
    2005
    Posty
    257
    Siła reputacji
    20

    Domyślny

    Moja propozycja - wykonaj fgets to stringa, sprawdź, czy zawiera same znaki od '0' do '9', a potem sscanf.

  8. Reklama
  9. #7
    Avatar Rzulf
    Data rejestracji
    2009
    Posty
    481
    Siła reputacji
    16

    Domyślny

    Cytuj Rollercoster napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Chodziło mi o liczba%1==0 :)
    Kod :
    int main(){
    	int liczba;
    	scanf("%d", &liczba);
    	if(liczba%1==0) {
    		printf("calkowita\n");
    	} else {
    		printf("niecalkowita\n");
    	}
    	system("pause");
    	return 0;
    }
    Coś takiego? Zawsze jest całkowita, nawet jak poda się literę.

  10. #8

    Data rejestracji
    2005
    Posty
    257
    Siła reputacji
    20

    Domyślny

    Cytuj Rzulf napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Kod :
    int main(){
        int liczba;
        scanf("%d", &liczba);
        if(liczba%1==0) {
            printf("calkowita\n");
        } else {
            printf("niecalkowita\n");
        }
        system("pause");
        return 0;
    }
    Coś takiego? Zawsze jest całkowita, nawet jak poda się literę.
    W takim razie, tak jak mówiłem, pobierz tekst do stringa, sprawdź czy zawiera same cyfry i konwertuj go na liczbę z tego stringa.
    Ostatnio zmieniony przez deathplanter : 24-11-2013, 17:48 Powód: konwertuj, nie rzutuj

  11. #9
    Avatar Rzulf
    Data rejestracji
    2009
    Posty
    481
    Siła reputacji
    16

    Domyślny

    Cytuj deathplanter napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    W takim razie, tak jak mówiłem, pobierz tekst do stringa, sprawdź czy zawiera same cyfry i konwertuj go na liczbę z tego stringa.
    Pisałem wcześniej, że dopiero zaczynamy programowanie. Na laborkach ledwo pętle zaczeliśmy, o stringach wiemy tyle że istnieją, a osoba prowadząca laborki czepia się używania czegoś czego nie poznaliśmy.

  12. Reklama
  13. #10

    Data rejestracji
    2005
    Posty
    257
    Siła reputacji
    20

    Domyślny

    Cytuj Rzulf napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Pisałem wcześniej, że dopiero zaczynamy programowanie. Na laborkach ledwo pętle zaczeliśmy, o stringach wiemy tyle że istnieją, a osoba prowadząca laborki czepia się używania czegoś czego nie poznaliśmy.
    Pisząc stringi miałem na myśli tablicę charów (czyli np char str[80]). Jeśli jeszcze jej nie mielliście, możesz co najwyżej popatrzeć na to co zwracają atoi albo strotul w przypadku błędów. W przeciwnym razie prawdopodobnie nie da się tego zrobić nie wychodząc poza materiał.

  14. #11
    Avatar bercik
    Data rejestracji
    2005
    Położenie
    Rojca
    Wiek
    36
    Posty
    421
    Siła reputacji
    21

    Domyślny

    Cytuj Rzulf napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Kod :
    int main(){
    	int liczba;
    	scanf("%d", &liczba);
    	if(liczba%1==0) {
    		printf("calkowita\n");
    	} else {
    		printf("niecalkowita\n");
    	}
    	system("pause");
    	return 0;
    }
    Coś takiego? Zawsze jest całkowita, nawet jak poda się literę.
    Po pierwsze to co robisz jest bez sensu, bo to zawsze będzie liczba całkowita - wczytujesz do zmiennej typu "int", który jest całkowity i nawet jak wpiszesz 2.5 to i tak skonwertuje na 2. To samo tyczy się literek - char konwertowany jest na int.
    W przypadku takich ograniczeń najlepiej przypisać wczytaną liczbę do inta i sprawdzić czy są równe:
    Kod :
    int main(){
    	int x;
    	float liczba = 0;
    	scanf("%f", &liczba);
    	x = liczba;
    	if(liczba == x) {
    		printf("calkowita\n");
    	} else {
    		printf("niecalkowita\n");
    	}
    	system("pause");
    	return 0;
    }

  15. #12
    Avatar Tibiarz
    Data rejestracji
    2008
    Położenie
    Tibiantis
    Wiek
    5
    Posty
    17,114
    Siła reputacji
    29

    Domyślny

    Cytuj deathplanter napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Moja propozycja - wykonaj fgets to stringa, sprawdź, czy zawiera same znaki od '0' do '9', a potem sscanf.
    To jak ktoś wpisze 23.0 to wyjdzie, że niecałkowita, a przecież jest całkowita.

  16. Reklama
  17. #13

    Data rejestracji
    2005
    Posty
    257
    Siła reputacji
    20

    Domyślny

    Cytuj tibia77 napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    To jak ktoś wpisze 23.0 to wyjdzie, że niecałkowita, a przecież jest całkowita.
    Fakt, w sumie potem mi to przyszło do głowy. Rozwiązanie bercika jest lepsze.

  18. #14
    Avatar Tibiarz
    Data rejestracji
    2008
    Położenie
    Tibiantis
    Wiek
    5
    Posty
    17,114
    Siła reputacji
    29

    Domyślny

    Cytuj bercik napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Po pierwsze to co robisz jest bez sensu, bo to zawsze będzie liczba całkowita - wczytujesz do zmiennej typu "int", który jest całkowity i nawet jak wpiszesz 2.5 to i tak skonwertuje na 2. To samo tyczy się literek - char konwertowany jest na int.
    Dodam jeszcze, że nawet gdyby nie popełnił tego błędu i nie deklarował zmiennej jako int, to i tak sposób by nie działał, bo w C, jeśli się nie mylę, dzielenie modulo % można stosować tylko do intów właśnie.

    Cytuj deathplanter napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Fakt, w sumie potem mi to przyszło do głowy. Rozwiązanie bercika jest lepsze.
    Nawet pomijając to, twój sposób to za dużo niepotrzebnego kombinowania wg mnie. Najlepiej tak jak bercik sprawdzać czy int jest równy float, albo tak jak w pierwszym poście
    Kod :
    if (floor(liczba) == liczba) printf("calkowita\n");
    Swoją drogą to nie wiem po co ten temat i te rozkminy, skoro kod wrzucony przez autora był dobry ;d

  19. #15
    Avatar Rzulf
    Data rejestracji
    2009
    Posty
    481
    Siła reputacji
    16

    Domyślny

    Cytuj tibia77 napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Dodam jeszcze, że nawet gdyby nie popełnił tego błędu i nie deklarował zmiennej jako int, to i tak sposób by nie działał, bo w C, jeśli się nie mylę, dzielenie modulo % można stosować tylko do intów właśnie.
    Nie mylisz się

    Cytuj tibia77 napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    kod wrzucony przez autora był dobry ;d
    Tak mi się właśnie wydawało, ale liczyłem na coś prostszego, dzięki za odpowiedź

  20. Reklama
Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. Fizyka - różniczka całkowita podstaw, przykład
    Przez Pawlo w dziale Szkoła i nauka
    Odpowiedzi: 0
    Ostatni post: 20-01-2014, 17:13
  2. czy jest strona, na ktorej mozna sprawdzic czy leci dany film
    Przez Taviik w dziale Filmy, seriale i telewizja
    Odpowiedzi: 2
    Ostatni post: 18-03-2013, 12:32
  3. [8.54] Jak sprawdzić czy dany item jest walkable
    Przez hin3r w dziale Strefa developerska
    Odpowiedzi: 0
    Ostatni post: 29-08-2010, 20:22
  4. Odpowiedzi: 15
    Ostatni post: 28-01-2010, 17:28
  5. [Poradnik] Jak sprawdzić czy postać posiada r-key
    Przez Smoku12345 w dziale Tibia
    Odpowiedzi: 24
    Ostatni post: 18-12-2007, 12:21

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •