Pętla for z break działa w nieskończoność

0

Witam,

minimalny problem z petla for z break, nie rozumiem czemu petla idzie mi w nieskonczonosc.


int main(void)
{
int a, b, i;
scanf("%d,%d", &a, &b);

for ( i ; ; i++ )
{
	{
		for ( i ; ; i++ )
			printf("X", i);
		if ( i == a ) break;
	}
	printf("\n");
	if ( i == b ) break;
}
...

Dzieki za pomoc z podstawami:) Pozdrawiam.

0

bo masz dwie petle, break wychodzi z drugiej petli ale druga nie ma zadnego breaka a jest nieskonczona.

0

Nie masz żadnego wyjścia z pętli wewnętrznej.

Zgaduję że usiłowałeś spłodzić coś na wzór tego:

#include <stdio.h>
int main()
  {
   int X,Y,x,y;
   scanf("%d,%d",&X,&Y); 
   for(y=0;y<Y;++y,printf("\n")) for(x=0;x<X;++x) printf("X");
   return 0;
  }
0

A zauważyłeś, że w obu pętlach iterujesz po tej samej zmiennej? Jeśli a > b pętla musi być nieskończona - wychodzisz z wewnętrznej pętli z i == a, potem jeśli a > b to także i > b, więc warunek i == b nigdy nie będzie spełniony.

0

Petla @_13th_Dragon działa doskonale, przeanalizuje sobie.

Ale pozostaje pytanie, czemu mi break nie działał? Może mi ktoś to wytłumaczyć? Rozumiem, ze nie chciało wyjść z pętli wewnętrznej, co trza zrobić (poprawić w aktualnym kodzie) aby działał break?

PS. Bede pamiętał opodziale Newbie i formatowaniu:)

0

Z wewnętrznej ci break wychodzi, ale z zewnętrznej nic (więc się znowu wewnętrzna odpala). Break oznacza "poziom w górę" a nie "w górę ile się da". Jak chcesz zrobić coś takiego, to albo powtórz warunek i breaka w pętli zewnętrznej (pod wewnętrzną), albo zrób z tego funkcję (wtedy pojedynczy return ją opuści niezależnie od ilości pętli "po drodze". I daj tym pętlom różne zmienne.

0

Ehhhh... Błąd jest oczywisty. i ma nieokreśloną wartość (bo nigdzie nie przypisał 0 czy czegoś innego). Więc pętla będzie się wykonywać tak długo, aż int się nie przekręci i nie dojdzie do zadanego a/b.

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