C schleifen und sprungmarken?

Mr. Poe

Lt. Commander
Registriert
Juli 2010
Beiträge
1.900
halo,

ich schreib grad nen programm für nen mikrocontroller in c.
jetzt brauch ich da n bsichen hilfe.:

hab jetz diesen code:
Code:
while(1)
{
   if(bedingung == true)
   {
      aus while schleife rausspringen;
   }
}

wie komm ich aus dieser schleife raus, wenn die if bedingung true ist?
geht das mit break?

gibts eig in c auch sprungmarken (goto oder sowas ähnliches)?

also würde das so gehen?:
Code:
while(1)
{
   if(bedingung == true)
   {
      goto ende;
   }
}

sonst noch irgentwelche befehle

ende:
sleep();
 
Zuletzt bearbeitet:
Entweder mit Break oder Exit. ist so ziemlich gleich in allen Sprachen.

Probiers halt einfach mal .. kanns aktuell nicht überprüfen. Allerdings sollte Google für solche Fragen reichen.
 
ja gegoogled hab ich scho... kommt iwie nix brauchbares raus....

werd das mit break mal ausprobieren...

aber gibts da in c auch sowas wie goto?
 
Zuletzt bearbeitet:
Was spricht dagegen das Gegenteil der Abbruchbedingung in die While-Bedingung einzubauen?
 
Beides was du geschrieben hast geht.

Mit break wäre es wohl die schönere Lösung, von goto sollte man schon Abstand nehmen, auch wenn es geht.
 
while(bedingung == false)
{
...
}
 
ne die whileschleife muss eine endlosschleife sein.

ich weis das goto veraltet ist... aber ich finds iwie schöner und einfacher zu programmieren ;)
also das funktioniert so wies ich oben geschrieben hab?

wie soll das was ich im beispiel mit goto geschrieben hab mit break gehen?
kann mir jemand nen beispiel geben?

also ich brauch goto, um ein paar anweisungen zu überspringen oder das ich wieder an den anfang des programms springe.
 
ja ich brauch goto nur für 2 sachen... das sollte ja dann noch lesbar sein ;)

wie geht das, wenn ich 2 verschachtelte while abfragen hab, das ich da aus beiden rausspringe?
beispiel:

Code:
while(1)
{
   while(1)
   {
      if(bedingung == true)
      {
         goto label;
      }
   }
}
label:

also wie schreib ich das ohne goto?

ich weis, das beispiel is total sinnlos... aber es is nur nen beispiel ;)
 
Die Frage von F_GXdx ist eine gute Frage und darüber solltest Du nachdenken.

<klugschwätz>Du widersprichst Dir auch selbst, wenn Du sagst, es soll eine Endlosschleife sein und Du willst dann aber rausspringen, wenn (...)</klugschwätz>

Was F_GXdx gefragt hat führt zu nachvollziehbarer Programmierung und ist auf jeden Fall besserer Stil. Jeder, der Mal fremden Code übernommen hat, in welchem sich jemand mit allem was geht verausgabt hat, wird Dir das bestätigen.

Viele Grüße
Winni
 
Setz eben die Bedingung in beide Schleifenteile und geh mit break raus, wenn sie erfüllt ist.

Code:
while(1)
{
   while(1)
   {
      if(bedingung == true)
      {
         break;
      }
   }

   if(bedingung == true)
   {
       break;
   }
}

@WinKill: Das mit der Endlosschleife hat man in jedem normalen Programm(Hauptschleife), denn das Programm wird nunmal so lange ausgeführt bis der User es beenden will.
Ob das jetzt hier so seinen Sinn hat wage ich zu bezweifeln bzw. kann man es sicher auch ohne schreiben.
Hier wird wahrscheinlich der Weg des geringstens Widerstands gegangen, wenn schon goto genutzt wird ;)
 
Zuletzt bearbeitet:
ne... geht ja nich...
wenn da noch viel mehr code drinen steht usw...
ich glaub du verstehst nich was ich mein..?

ich mein das jetzt so...:
mal nen ausführlicheres beispiel:

Code:
while(1)
{
	Beep();	//Beep!!!
	if(taste_1_gedrückt == true)
	{
		while(1)	// LED Blinken lassen
		{
			if(taste_2_gedrückt == true)
			{
				goto label;
			}
			LED_ON;
			Wait(1000);
			LED_OFF;
			Wait(1000);
		}
	}
}
label:

also wenn man taste 1 drückt und danach taste 2, soll das piepen, das mit beep(); ausgelöst wurde aufhören. und andere anweisungen sollen ausgeführt werden, die auserhalb der ersten while schleife stehen.
 
Wenn Taste_2_gedrueckt in der ersten Schleife keine Bedeutung hat, dann kannst du es so machen wie ich es geschrieben habe, einfach in der ersten Schleife diese Bedingung nochmals abfragen, denn sie ist ja da immer noch wahr(nehme ich an), und mit break auch die erste Schleife verlassen.

Edit: Nimm Yuuris...hab zuwenig gedacht, seines macht viel mehr Sinn und ist wesentlich einfacher und die gängigere Handhabung.
 
Code:
int Taste1Gedrueckt = 1, Taste2Gedrueckt = 1;
while(Taste1Gedrueckt == 1)
{
	Beep();	//Beep!!!
	if(Taste1Gedrueckt == 1)
	{
		while(Taste2Gedrueckt == 1)	// LED Blinken lassen
		{
			LED_ON;
			Wait(1000);
			LED_OFF;
			Wait(1000);
			taste2Gedrueckt = GetTaste2Status();
		}
	}
	Taste1Gedrueckt = GetTaste1Status();
}
 
Jo, ich versteh dich echt nicht. Wie schon von mehreren Leuten geschrieben ist eine Endlosschleife mit break innen das gleiche, wie eine normale Schleife mit Abbruchbedingung. Bzw. man kann es ineinander umformen.

Das Problem mit goto und break und was weiß ich alles ist eben, dass du im Code, wenn du ein goto liest, jedesmal die Marke dazu finden musst. Und das ist einfach nervig. Bei einer normalen Schleife weißt du ja, wo die Klammer aufgeht und wieder zugeht und dazwischen ist der Code.
 
Zuletzt bearbeitet:
hmmm ok^^

ok danke dann werd ich mal mein programm n bischen umschreiben ;)

@edit:
theoretisch müsste doch ein goto schneller sein oder? weil da muss er nicht nochmal die variable überprüfen...

@F_GXdx:
ja stimmt...
nur ich schreibs halt so... ich weis nich warum ich das so mach aber ich machs so ;)
und es funktioniert
 
Zuletzt bearbeitet:
Zurück
Oben