Προς το περιεχόμενο

Διπλός βρόχος for στη C


FrAcTaL-gR

Προτεινόμενες αναρτήσεις

Δημοσ.

Χρησιμοποιώ ενα διπλό βρόχο for για να διατρέξω τα στοιχεία ενός πίνακα 2 διαστάσεων. Μόλις βρώ το στοιχείο (που εκ των προτέρων είναι γνωστό οτι υπάρχει) θέλω να ελέγξω με μια if αν ισχύει μια συνθήκη για το στοιχείο αυτό. Αν η συνθήκη είναι αληθής θέλω να εκτελεστούν κάποιες εντολές, αλλιώς θέλω να βγώ άμεσα από το διπλό βρόχο.

 

Αν ήταν μονός ο βρόχος , θα έβαζα μια εντολή break και θα καθάριζα. Τώρα με το διπλό βρόχο έχω μπερδευτεί λίγο. Χρειάζονται 2 εντολές break, και πως αυτές θα τοποθετηθούν στον κώδικα;

 

Ακολουθεί ο κώδικας

 

>
       int i, j;

for ( i = 0; i < κ; i++ )
	for ( j = 0; j < κ; j++ )
		if (  συνθήκη )
		{
			εντολές
		}

  • Moderators
Δημοσ.

Πιθανοί τρόποι

 

>
int i, j;
for ( i = 0; i < κ; i++ )
{
	for ( j = 0; j < κ; j++ )
	{
		if (  συνθήκη )
		{
			εντολές
		}
		else
		{
			i = k;
			break;
		}
	}
}

ή

>
int i, j;
bool exit_loop = false;

for ( i = 0; i < κ; i++ )
{
	for ( j = 0; j < κ; j++ )
	{
		if (  συνθήκη )
		{
			εντολές
		}
		else
		{
			exit_loop = true;
			break;
		}
	}
	if(exit_loop)
	{
		break;
	}
}

Δημοσ.

σε ευχαριστώ φίλε μου για την άμεση απάντηση, αλλά διαπίστωσα οτι δεν διατύπωσα με ακρίβεια τις προθέσεις μου (αρχάριος βλέπεις).

 

Λοιπόν, μόλις βρώ το στοιχείο (που εκ των προτέρων είναι γνωστό οτι υπάρχει) θέλω να ελέγξω με μια if αν ισχύει μια συνθήκη για το στοιχείο αυτό. Αν η συνθήκη είναι αληθής θέλω να εκτελεστούν κάποιες εντολές και επιπλέον να βγω άμεσα από το διπλό βρόχο, αλλιώς θέλω να βγώ άμεσα από το διπλό βρόχο.

Δημοσ.

Αλλάζοντας λίγο τον κώδικα του Praetorian:

>
int i, j;
for ( i = 0; i < κ; i++ )
{
	for ( j = 0; j < κ; j++ )
	{
		if ( στοιχείο )
		{ 
			if (  συνθήκη )
			{
				εντολές
			}
			i = k;
			break;
		}
	}
}

>
int i, j;
bool exit_loop = false;

for ( i = 0; i < κ; i++ )
{
	for ( j = 0; j < κ; j++ )
	{
		if ( στοιχείο )
		{ 
			if (  συνθήκη )
			{
				εντολές
			}
			exit_loop = true;
			break;
		}
	}
	if(exit_loop)
	{
		break;
	}
}

Δημοσ.

τελικά βρήκα την άκρη, χρησιμοποιώντας την ιδέα σου Praetorian.

ο κώδικας είναι κάπως έτσι.

 

>
int i, j;
for ( i = 0; i < κ; i++ )
{
	for ( j = 0; j < κ; j++ )
	{
		if (  συνθήκη )
		{
			εντολές
                               i = k;
                               j = k;
		}
		
	}
}

ευχαριστώ φίλε

ave cesar :-D

edit: ευχαριστώ και τον φίλο antonl για το ενδιαφέρον

Δημοσ.

Το να αλλάζεις τους μετρητές για να τερματίσει μια επανάληψη δεν είναι σωστός τρόπος, οδηγεί σε ακατανόητο κώδικα.

 

Ή χρησιμοποιήσε την εντολή do, ή την εντολή while, ή βάλε διπλή συνθήκη στις for:

for ( j = 0; j < κ && !done; j++ )

 

όπου το done θα γίνεται true όταν ισχύει η συνθήκη τερματισμού που θέλεις.

Δημοσ.

Ενδιαφέρουσα η παρατήρηση και τη σημείωσα, ευχαριστώ.

Εξ' αρχής σκεφτόμουν να χρησιμοποιήσω 2 while, ένθετες, αλλά είμαι περισσότερο εξοικιωμένος με τη for. Πάντως όλος ο παραπάνω κώδικας αποτελεί μια συνάρτηση , οπότε με τη χρήση κατάλληλων σχολίων, δεν θα υπάρξει πρόβλημα ανάγνωσης του από τρίτους.

Δημοσ.

κοιτα, ο αλκης εχει δικιο

αμα συνηθισεις να κανεις "μπακαλιες", ο κωδικας σου συντομα θα γίνει κωλος :eek:

 

εδω αυτο γίνεται ακομα και αν προσπαθεις να τα κανεις όλα σωστα....

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...