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

Dziwny błąd w c++

Object Storage Arubacloud
+1 głos
311 wizyt
pytanie zadane 20 listopada 2021 w C i C++ przez erius Nowicjusz (210 p.)

Witam

Napisałem taki oto kod:

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <windows.h>

using namespace std;
int c, x;
int main()
{
    cout<<"Witaj. Pomyslalem sobie liczbe calkowita z zakresu <1,100>"<<endl;
    srand(time(NULL));
    c = rand()%100+1;
    cout<<c<<endl;
    Sleep(400);
    cout<<"Zgadnij jaka to liczba: ";
    cin>>x;
    while(x!=c)
    {
        if(x>c)
        {
          cout<<endl<<"Za duza licza, sprobuj jeszcze raz: ";
          cin>>x;
        }
        else
        {
            cout<<endl<<"Za niska liczba, sprobuj jeszcze raz: ";
            cin>>x;
        }

    }
    Sleep(700);
    system("cls");
    cout<<endl<<"Udalo ci sie odgadnac liczbe";


    return 0;
}

Kiedy wpisuję liczby max 9-cyfrową program działa prawidłowo, natomiast gdy w piszę liczbę 10 i więcej-cyfrową program cyklicznie wypisuje na ekranie: "Za duza licza, sprobuj jeszcze raz: ". Proszę o pomoc w ustaleniu przyczyny problemu.

3 odpowiedzi

0 głosów
odpowiedź 20 listopada 2021 przez Nelson89 Dyskutant (7,720 p.)
wybrane 22 grudnia 2021 przez erius
 
Najlepsza

Cześć,

to oznacza, że podana liczba wychodzi poza limit tego co może przechować dany typ. Aby temu zapobiec możesz użyć innego typu, który potrafi przechować większą liczbę. Możesz też sprawdzić jaką największą liczbę przechować może dany typ z użyciem biblioteki limits.

#include <iostream>
#include <limits>


using namespace std;


int main(){
    cout << "Limit dla typu int: " << numeric_limits<int>::min() << " " << numeric_limits<int>::max() << endl;
}

Możesz sobie przeczytać także tutaj więcej o tym.

Pozdrawiam,

Nelson

komentarz 21 listopada 2021 przez erius Nowicjusz (210 p.)
Bardzo dziękuję!
+2 głosów
odpowiedź 20 listopada 2021 przez j23 Mędrzec (194,920 p.)

Strumień wchodzi w stan błędu po podaniu liczby większej od możliwości typu int (32-bity ze znakiem).

Tak możesz zrobić:

    std::cout << "Zgadnij jaka to liczba: ";

    while(std::cin >> x) {
        if(x == c) { std::cout << "\nUdalo ci sie odgadnac liczbe"; break; }
        if(x > c) std::cout << "\nZa duza licza, sprobuj jeszcze raz: ";
        else std::cout << "\nZa niska liczba, sprobuj jeszcze raz: ";
    }

 

komentarz 21 listopada 2021 przez erius Nowicjusz (210 p.)

Bardzo dziękuję i pozdrawiamsmiley

0 głosów
odpowiedź 20 listopada 2021 przez VBService Ekspert (253,340 p.)
1
komentarz 21 listopada 2021 przez erius Nowicjusz (210 p.)
Sprawdzę to dziękuję

Podobne pytania

0 głosów
2 odpowiedzi 287 wizyt
pytanie zadane 22 kwietnia 2022 w C i C++ przez Mavimix Dyskutant (8,390 p.)
0 głosów
1 odpowiedź 140 wizyt
0 głosów
1 odpowiedź 85 wizyt
pytanie zadane 24 marca 2020 w C i C++ przez dawid2002 Mądrala (5,190 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...