Instrukcja break całkowicie przerywa pętlę, co powoduje przejście do dalszego wykonywania programu, "poniżej" pętli. Natomiast continue przerywa obecną iterację pętli i przechodzi do następnej, bez względu na to, co się znajduje za tą instrukcją.
Zapis zmienna += wartość jest równoznaczny z zmienna = zmienna + wartość. Tak samo działają podobne operatory typu -=, *= czy /=, z tym, że zamiast dodawania jest odpowiednio odejmowanie, mnożenie i dzielenie.
W kodzie, który podałeś, akurat nie może powstać pętla nieskończona, ponieważ jej warunek na to nie pozwala - zmienna i nie będzie cały czas mniejsza od ile (w tym przypadku 5), gdyż jest ona inkrementowana (zwiększana o jeden) w każdym przejściu pętli. Gdyby jej wartość pozostawała stała lub się zmniejszała, pętla byłaby nieskończona.
W dodatku pętlę while w Twoim kodzie najlepiej zamienić na for, która to posiada zmienną określającą numer iteracji oraz nie jest potrzbne jej bezpośrednie inkrementowanie w ciele pętli:
#include <stdio.h>
int main(){
int ile=5;
int tab[ile];
int sum = 0;
int i;
tab[0]=-1; tab[1]=-2; tab[2]=3; tab[3]=-4; tab[4]=-5;
for (int i = 0; i < ile; i++){
if (tab[i] >= 0){
continue;
}
sum+=tab[i];
}
printf("suma = %d\n",sum);
return 0;
}
Inkrementacja zmiennej i będzie się tutaj dziać automatycznie, przy każdej kolejnej iteracji.