User Tools

Site Tools


qna:c:flow-control:break-continue

Πως καταλαβαίνω τα break/continue σε ποιό βρόχο αναφέρονται

Η χρήση της continue αφορά μόνο τις εντολές που είναι βρόχοι, δηλαδή for, while και do/while.

Ενώ η χρήση της break αφορά επιπλέον και την switch/case/default.

Προφανώς, οι εντολές continue και break βρίσκονται πάντα μέσα σε κάποιο if ή switch ώστε να μην εκτελούνται σε κάθε περίπτωση, αλλά μόνο όταν “συμφέρει” τον κώδικά μας.

Επίσης, οι εντολές continue και break, όπως όλες οι εντολές στη C, βρίσκοντα πάντα μέσα σε ένα ή περισσότερα ζευγάρια άγκιστρα. Δηλαδή της συνάρτησης, αλλά και άγκριστρα από if, for, while, κλπ.

Ο κανόνας είναι ότι οι continue και break εφαρμόζονται/διακόπτουν την κοντινότερη εντολή από αυτές που αφορούν και ταυτόχρονα βρίσκονται μέσα στα άγκιστρά της.

Για να δούμε αυτόν τον κανόνα εφαρμοσμένο και σε ένα παράδειγμά, θα χρησιμοποιήσουμε τον ακόλουθο αποσπασματικό κώδικα:

void test() {
    ...
    for (int i = 0; i < 100; ++i) {	   // FOR #1
        int x, y;
        while (...) { 			 // WHILE #1
            ...       
        }             
        if (x>i) {
            break;  // ή και continue      -- ΘΕΣΗ 1
        }
        while (...) {			 // WHILE #2
            ...
            if (y>i) {                           
                break;  // ή και continue  -- ΘΕΣΗ 2
            }
            ...
            switch(i+x+y) {		// SWITCH #1
                case 1:
                    ...
                    return;
                case 2:
                    ...
                    break;		  // ΘΕΣΗ 3α
                case 3:
                    ...
                    continue;		  // ΘΕΣΗ 3β
                ...
            }
        }
    }
    ...
}

Σε αυτόν η break στη θέση #1 βρίσκεται μόνο μέσα στα άγκιστρα

  • της συνάρτησης test ,
  • της for (for#1) και
  • της if.

Από αυτές η break, αφορά μόνο την for. Οπότε η break στη θέση #1 - εφόσον εκτελεστεί - διακόπτει την εκτέλεση της for (for#1).

Η επόμενη break (στη θέση #2) βρίσκεται μόνο μέσα στα άγκιστρα

  • της συνάρτησης test,
  • της for (for#1),
  • της while (while#2) και
  • της if.

Από αυτές η break αφορά μόνο τις for (for#1) και while (while#2). Όμως η πιο κοντινή είναι η while (while#2). Άλλωστε αυτή η while με τη σειρά της βρίσκεται μέσα στα άγκιστρα της for (for#1). Άρα η break (στη θέση #2) διακόπτει την εκτέλεση του βρόχου while (while#2).

Τέλος, οι break και continue στις θέσεις #3α και #3β, βρίσκονται μέσα στα άγκιστρα

  • της συνάρτησης test,
  • της for (for#1),
  • της while (while#2) και
  • της switch

Από αυτές η break αφορά τις for, while και switch και κοντινότερη είναι η switch, άρα η break της θέσης #3α διακόπτει την εκτέλεση της switch.

Από την άλλη η continue αφορά μόνο τις for και while και κοντινότερη είναι η while, άρα η continue της θέσης #3β διακόπτει την εκτέλεση της τρέχουσας επανάληψης της while (while#2).

qna/c/flow-control/break-continue.txt · Last modified: 2021/04/09 10:27 by xallos