Ich habe eine Endlosschleiche wie geht das denn?

3Cyb3r

Erfahrenes Mitglied
Hallo ;P
kann mir jemand sagen wieso die folgende for-Schleife eine Endlosschelife produziert?

C++:
void LCD_Display::operator>>(const char *s)	
{ 
	int  k,
		 i, 
		 j, 
		 l,
		 LA = 15,
		 LE = 1,
		 len = strlen(s);
	char buffer[18];

	for(k = 0; k < (len + 15); k++)
	{
		for(i = 0; i < LA; i++)
			buffer[i] = ' ';
		for(j = 0; j < LE; j++)
		{
			if((LA + j) < DISP_LENGTH)
				buffer[LA+j] = s[j];
		}
		for(l = 0; l < LE; l++)
		{
			if(k >= len )
				buffer[LA+len+l] = ' ';
		}
		buffer[17] = '\0';
			
		home();
		_puts_delay(buffer);		
		
		
		set_position(0,1);
		refresh();
		
		sprintf(buffer, "%d", k);
		_puts(buffer);
		
		LA--;
		LE++;
	}
}

Danke
 
Wie man unschwer erkennen kann lasse ich k ausgeben.
Ja und das ganze habe ich gerade ein bischen laufen lassen ja und k war auf weit über 5000.
Wieos um Gottes Willen springt mein Programm nicht aus der Schleife und aus dem Operator?
Ihc kann es mir nicht erklären.
 
Hi,

Als erstes fällt mir deine Signatur auf!:D
Nur durch eifriges Schleifen gewinnt der Jade seinen vollen Wert.

Hm, sicher dass deine Schleife wirklich eine endosschleife ergibt, und nicht einfach einer der Funktionen, die du drinnen aufrufst sich aufhängen?

probier doch mal nur die for-schleife, mit den drin verschachtelten for-s, ohne di funktionen, wie z.B.: home() oder refresh()...

EDIT: oh war ich zu langsam:)
EDIT2: lass dir mal mit einem Debuger die variable "len" ausgeben. vielleicht gibt strlen() einen zu großen wert zurück?
 
Zuletzt bearbeitet:
So habe das ganze mit festen Werten durhcprobiert
so:
C++:
oid LCD_Display::operator>>(const char *s)	
{ 
	int  k = 0,
		 i, 
		 j, 
		 l,
		 LA = 15,
		 LE = 1,
		 len = strlen(s);
	char buffer[18];

	while(k < 25)
	{
		for(i = 0; i < LA; i++)
			buffer[i] = ' ';
		for(j = 0; j < LE; j++)
		{
			if((LA + j) < DISP_LENGTH)
				buffer[LA+j] = s[j];
		}
		for(l = 0; l < LE; l++)
		{
			if(k >= len )
				buffer[LA+len+l] = ' ';
		}
		buffer[17] = '\0';
			
		home();
		_puts_delay(buffer);		
		
		
		set_position(0,1);
		refresh();
		
		sprintf(buffer, "%d", k);
		_puts(buffer);
		
		LA--;
		LE++;
		k++;
	}
}

Der maximal Wert bei dem noch rausgesprungen wird ist 25
bei der Überprüfung in der Schleife
 
also sobald k >= 25 ist, fährt sich die Schleife fest?
sehr seltsam. Auf die schnelle fällt mir nur eine unsaubere Lösung ein:
Nimm zwei schleifen, wenn die eine bei 25 ist, wir k wieder auf null gesezt und eine andere um 1 erhöht.
 
Hallo,

was für einen Wert hat denn DISP_LENGTH? Nach kurzen Anschauen des Codes würde ich sagen, dass zumindest diese Stelle kritisch ist, da LA+len+l die reservierte Größe von buffer übersteigen könnte:
C++:
for(l = 0; l < LE; l++)
{
    if(k >= len )
         buffer[LA+len+l] = ' ';
}
Bist du sicher, dass eine Endlosschleife und kein Absturz ist?

Gruß
MCoder
 
C++:
#define DISP_LENGTH 16

Das komische ist ich habe k jetzt öfter überprüft ab und zu zählt k bis unednlich hoch und dann mal wieder springt k immer ab ca 40 auf 0wirder wieder hochgezählt springt wieder auf 0 .........

EDIT:
Ja genau ein Absturz du hast es erfasst.
Da habe ich wohl ein Denfehler gemacht Danke

Manchmal sieht man den Wald vor lauter Bäumene nicht -.-^^
 
Zuletzt bearbeitet:
Zurück