2011-01-09 7 views
2

Wir können For-Schleife und While-Schleife für den gleichen Zweck verwenden. was bedeutet, dass sie unseren Code beeinflussen, wenn ich anstelle von while verwende? Die gleiche Frage stellt sich zwischen if-else und switch-case? Wie zu entscheiden, was zu verwenden ist? zum Beispiel welche Sie bevorzugen würden?Wann sollte die for-Schleife über die while-Schleife verwendet werden?

Dieser Code:

int main() 
{ 
    int n = 10; 

    for(int i=0;i<n;i++) 
    { 
     do_something(); 
    } 
    return 0; 
} 

Oder dieser Code:

int main() 
{ 
    int n=10,i=0; 

    while(i<n) 
    { 
      do_something(); 
      i++; 
    } 
    return 0; 
} 

bei Verwendung für oder while-Schleife den Code nicht bewirken mit irgendwelchen Mitteln, dann kann ich wissen, was die Notwendigkeit war zu 2 zu machen Lösung für dasselbe Problem?

+1

Entfernt das C-Tag, da es kein 'cin' in C gibt. – Puppy

+0

http://Stackoverflow.com/questions/2950931/for-vs-while-in-c-programming – Lucas

+1

Ich änderte leicht den Titel und legte die [c] Kennzeichne es zurück, nachdem du das 'cin' entfernt hast, da diese Frage sicherlich die gesamte C/C++ Programmierbasis umfasst. – SiegeX

Antwort

10

Wenn Sie die Anzahl der Iterationen kennen, die die Schleife vorher ausführen soll, würde ich das for Konstrukt empfehlen. While-Schleifen sind gut, wenn die Endbedingung der Schleife in einer noch zu bestimmenden Zeit auftritt.

+0

+1 stimme ich zu. ;) ..char lim .. – BlackBear

13

Verwenden Sie das, was die Intention Ihres Codes am deutlichsten macht.

0

Auf keinen Fall beeinflussen sie Ihr Programm so, wie es funktioniert! Es ist die Frage der Leichtigkeit, besser zu verstehen.

switch(i)  // Once finding your case, you can easily know where the switch ends 
       // and thus the next statement of execution 
{ 
    case 1: break ; 
    case 2: break ; 
    // ..... 
    case 10: break ; 
    default:break ; 
} 

if(i==1) // Here you have the pain of finding where the last else if ends ! 
{} 
else if(i==2) 
{} 
// ... 
else if(i==10) 
{} 

Es ist jedoch eine Frage des Geschmacks. Ich bevorzuge switch.

+0

und was ist mit if-else und wechseln Fall – Atul

+0

@Atul Wie jeder schlug es ist eine Frage der Lesbarkeit und Leichtigkeit zu verstehen. – Mahesh

+1

@Atul: wahrscheinlich ist der Schalter besser, wenn Sie viele Bedingungen gleichzeitig testen müssen. – BlackBear

2

Im Allgemeinen ist eine for Schleife kann für einfache Schleifen vorzuziehen sein, da die Logik der Schleife in einer einzigen Zeile enthalten ist:

for (int i = 0; i < 10; ++i) {...}

jedoch manchmal müssen wir komplexere Logik oder Flußsteuerung . Eine while Schleife ermöglicht es uns, kompliziertere Schleifen zu implementieren. Angenommen, wir die Zählervariable unter bestimmten Bedingungen nur erhöhen möchten:

int i = 0; 
while (i < 10) 
{ 
    if (some_condition) ++i; 
    else if (some_other_condition) { ... } 
    else break; 
} 
+0

Ich sehe dieses Argument nicht. Ersetzen Sie einfach die ersten beiden Zeilen durch 'for (int i = 0; i <10;)' und Sie haben die gleiche Schleife. (Und den Bonus haben, den Umfang zu beschränken, wenn "i"). –

+0

@Billy ONeal, wahr - aber dem extrem folgend können wir daraus schließen, dass 'while' völlig überflüssig ist, da jedes' while (condition) 'durch' for (; condition;) 'ersetzt werden kann. Es ist subjektiv, aber ich denke, while kann eine klarere Wahl sein, wenn die Zählervariable bedingt aktualisiert wird, da jemand, der den Code liest, normalerweise erwartet, dass eine typische for-Schleife eine (nicht-bedingte) Aktualisierung der Zählervariablen enthält. –

1

Sie können nicht schreiben while(int i=0, i < n); das heißt, Sie müssen i vor der while Schleife definieren; bedeutet i existiert sowohl innerhalb als auch außerhalb der Schleife.

Im Fall von for Schleife können Sie jedoch i direkt in der for Schleife selbst definieren; und so existiert i nicht außerhalb der Schleife. Das ist ein Unterschied. Nur wegen dieses Unterschieds mag ich for mehr als while. Und verwenden Sie while selten, wenn for macht mehr umständlich!

1

Verwenden Sie einfach die, die den Code lesbar und logisch macht.

In einigen Fällen wird der Compiler (gcc mindestens) in der Lage sein, ein wenig besser zu optimieren als eine for-Schleife, die dasselbe tut. Wenn ich mich richtig erinnere, dass die Optimierung nur wenige Taktzyklen dauert, wird es wahrscheinlich nie einen merklichen Einfluss auf die Performance haben.

1

Es gibt einige sehr feine Unterschiede ..

  • Umfang der Schleifenvariable (n), beispielsweise mit der for Schleife i lokalen Bereich hat, mit einem while dies vorher definiert werden muss (was bedeutet es, nachdem verfügbar ist, können Sie natürlich tun können, mit for auch ..)
  • continue mit einer for Schleife wird variabel mit einem while erhöht/erniedrigt werden, dann würden Sie den Vorgang vor continue

Ehrlich gesagt einfügen müssen, wenn Sie benötigen Inkrementieren/Dekrementieren, eine for Schleife macht Sinn, wenn Sie die Grenzen nicht kennen, und es gibt kein echtes Inkrement/Dekrement, eine while Schleife macht mehr Sinn, z.B.

while(some_stream >> input) 
{ 
    // do stuff... 
} 
+1

Das Problem mit dem Gültigkeitsbereich gilt nur für C++ ... –

+2

.......... und C99. –

4

Ich versuche, die for Schleife zu bevorzugen. Warum? Weil, wenn ich eine for Schleife sehe, kann ich erwarten, dass die ganze Schleife bookkeeping in einer einzelnen Aussage gehalten wird. Ich kann break oder continue Anweisungen einfügen, ohne sich Gedanken darüber machen zu müssen, wie die Schleife funktioniert. Und am wichtigsten ist, dass der Hauptteil der Schleife sich auf das konzentriert, was die Schleife tatsächlich tun soll, anstatt die Schleife selbst zu warten. Wenn ich eine while sehe, dann muss ich den gesamten Schleifenkörper betrachten und verstehen, bevor ich verstehen kann, welches Iterationsmuster die Schleife verwendet.

Der einzige Ort, den ich while am Ende mit ist für die wenigen Fälle, in denen die Steuerung der Schleife durch eine außerhalb Routine zur Verfügung gestellt wird (das heißt FindFirstFileW)

Es ist alles eine Frage der persönlichen Meinung though. Viele Leute mögen nicht, was ich am Ende mit for Schleifen mache, weil die Schleifenanweisung oft über mehrere Zeilen erstreckt.

Verwandte Themen