unsigned int i nieskończona pętla

unsigned int i nieskończona pętla
Degusto
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Piła
  • Postów: 70
0

Witam mam następujący problem. Jak ustawie zmienną na typ unsigned int to zwiesza mi program. Gdy zmienna jest int to program działa w 100%. Mógłby ktoś wspomóc? :)

Kopiuj
#include <iostream>
using namespace std;

int main()
{
    unsigned int klocki;
    int poziom = 0 ;
    cin >> klocki;
    for(int i = 1; klocki - i >= 0; i++)
    {
            klocki -= i;
            poziom = i;
    }
    cout<<poziom;
    return 0;
}
hauleth
  • Rejestracja: dni
  • Ostatnio: dni
1

klocki - i zawsze będzie większe od 0, gdyż przypisujesz różnicę unsigned int i int do unsigned int. A co jeśli dam wartość 2? Przy 2 przejściu przez pętlę całość przekręci Ci się. Włącz debugger i zobacz jak to wygląda.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
#include <iostream>
using namespace std;
 
int main()
  {
   unsigned klocki,poziom=0 ;
   cin>>klocki;
   for(unsigned i=1;i<=klocki;++i)
     {
      klocki -= i;
      poziom = i;
     }
   cout<<poziom;
   return 0;
  }

lub:

Kopiuj
#include <iostream>
using namespace std;
 
int main()
  {
   unsigned klocki;
   cin>>klocki;
   cout<<(int)((sqrt(1+klocki*8)-1)/2)<<endl;
   return 0;
  }
Degusto
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Piła
  • Postów: 70
0

Faktycznie gafa. Zapomniałem o tym warunku, który mógł sprowadzić zmienną na ujemną wartość. Dzięki za pomoc.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.