webForumDet fria alternativet

Vad är det som är fel???

C/C++

5 svar · 201 visningar · startad av Viktor

Medlem sedan aug. 20021 752 inlägg
Frågan#1

Har suttit med det här länge nu och kan inte se något fel...
Här är koden, när iCurSel blir lika stor eller större än iItems och bLoop är true så ska iCurSel bli 0

bool CMenu::SelectNext()
{
	iCurSel++;
	if(bLoop)
		printf("Loop=true, CurSel: %d, Items: %d\n",iCurSel,iItems);
	else
		printf("Loop=false, CurSel: %d, Items: %d\n",iCurSel,iItems);
	if((iCurSel>=iItems)&&(bLoop==true))
	{
		printf("Set to 0\n");
		iCurSel=0;
	}
	else if((iCurSel>=iItems)&&(bLoop==false))
	{
		printf("Remove one\n");
		iCurSel--;
		return(false);
	}
	printf("Do nothing?\n");
	return(true);
}

Här är den output jag får från programmet när jag kör det, iCurSel blir aldrig 0, det ökar bara

Loop=true, CurSel: 0, Items: 6
Do nothing?
Loop=true, CurSel: 1, Items: 6
Do nothing?
Loop=true, CurSel: 2, Items: 6
Do nothing?
Loop=true, CurSel: 3, Items: 6
Do nothing?
Loop=true, CurSel: 4, Items: 6
Do nothing?
Loop=true, CurSel: 5, Items: 6
Do nothing?
Loop=true, CurSel: 6, Items: 6
Do nothing?
Loop=true, CurSel: 7, Items: 6
Do nothing?
Loop=true, CurSel: 8, Items: 6
Do nothing?

Antagligen är det något jätte lätt fel eller så har jag hittat en gigantisk bug i gcc 3.0.2 :D

/Viktor

Medlem sedan okt. 20023 030 inlägg
#2

Rätta mej om jag har fel men C/C++ bryr sej om stora och små bokstäver, cout är inte samma som Cout, m.m.. Borde inte ditt "true" bli "TRUE" också? Så har iallafall alltid jag skrivit.

Medlem sedan aug. 20021 752 inlägg
#3

Tyvärr inte, BOOL, TRUE och FALSE är (vad jag vet) macron implementerade av Microsoft i VC++ (windef.h?), jag jobbar inte mot windows utan mot en annan platform.

Ingen annan som kan se något fel?? Jag fattar fortfarande noll :(

/Viktor

Medlem sedan aug. 20021 752 inlägg
#4

Ok, nu har jag fått det att fungera, men jag fattar inte varför det inte ville fungera förut (med koden ovan)
Det som jag har gjort är att jag har bytt ut

if((iCurSel>=iItems)&&(bLoop==true))
...
else if((iCurSel>=iItems)&&(bLoop==false))

mot

if((iCurSel>=iItems)&&(bLoop))
...
else if((iCurSel>=iItems)&&(!bLoop))

då fungerar det perfekt. Någon som har en bra förklaring? Ska man inte kunna kolla om en boolean är true eller false på mitt första sätt?

/Viktor

Medlem sedan dec. 20003 887 inlägg
#5
bool CMenu::SelectNext()
{
   iCurSel++;
   if(bLoop)
   {
      printf("Loop=true, CurSel: %d, Items: %d\n",iCurSel,iItems);
      if(iCurSel>=iItems)
      {
         printf("Set to 0\n");
         iCurSel=0;
      }
   }
   else
   {
      printf("Loop=false, CurSel: %d, Items: %d\n",iCurSel,iItems);
      if(iCurSel>=iItems)
      {
         printf("Remove one\n");
         iCurSel--;
         return(false);
      }
   }

   printf("Do nothing?\n");
   return(true);
}
Medlem sedan dec. 20003 887 inlägg
#6

Ah... du kom på det ;)

Tror att det där kan ha att göra med definieringen av typerna True och False, men jag vet inte så noga.

Jag brukar använda mig av if(bTrue) {} och/eller if(!bTrue) {}.

492 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
357 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)