unsigned int i nieskończona pętla

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? :)

#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;
}
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.

1
#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:

#include <iostream>
using namespace std;
 
int main()
  {
   unsigned klocki;
   cin>>klocki;
   cout<<(int)((sqrt(1+klocki*8)-1)/2)<<endl;
   return 0;
  }
0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1