Frage zu c++ - for-Schleife mit Break

Olli

9*UotD / 13*UotN
ID: 4117
L
21 April 2006
3.518
189
Hi,

habe hier ein kleines Problem mit einem Code.
Es sollen alle ungeraden Zahlen zwischen 1 und 10 ausgegeben werden. Aber leidet endet das Programm nach 1.
Wer kann mir sagen, wo der Fehler liegt?

Code:
#include <iostream>
using namespace std;

int main()
{
    int n = 2;
    for (int m = 1; m < 12; ++m)
    {if (m % n == 0) break;
    cout << m << "  ";}
    cout << " Ende ";
    system("pause");
    return 0;
}

Ich bin mir sicher, es gibt elegantere Lösungen, aber ich hätte es gern mit for und break.

Gruß
Olli
 
ich bin gerade etwas verwirrt, bewirkt break nicht den Schleifen ABBRUCH?

Also sobald eine Zahl erscheint, die m mod n ist, wird die schleife abgebrochen.

Bau das mal um, also nur if (m % n != 0) cout << m << " ";
 
Das Problem dabei ist, dass er dann alle geraden Zahlen ausgibt.
Ja, ein Break bewirkt den Austritt aus einer Schleife, aber hier ein Beispiel, wo es wunderbar geht:
Code:
int n = 7;
for (int m = 22; m < 35; ++m)
   {if (m%n == 0) break;
     cout << m << "     ";
   }
cout << "Ende"; 

//Ausgabe
//22 23 24 25 26 27 Ende <-- 28 fehlt, da mit break ausgeschlossen.

Gruß
Olli
 
int n = 7;
for (int m = 22; m < 35; ++m)
{if (m%n == 0) break;

Du rechnest %. Modulo.

M = 22 mod 7 = 3, ... -> Ausgabe
23 mod 7 =3, ... -> Ausgabe
24 %7 =3, ... -> Ausgabe

...
28%7=4 Rest 0 -> Abbruch.

Also immer wenn eine Zahl durch 7 ohne Rest teilbar ist bricht diese Schleife ab.
Du willst aber doch was ganz anderes.
 
Du rechnest %. Modulo.

M = 22 mod 7 = 3, ... -> Ausgabe
23 mod 7 =3, ... -> Ausgabe
24 %7 =3, ... -> Ausgabe

...
28%7=0 -> Abbruch.

Also immer wenn eine Zahl durch 7 ohne Rest teilbar ist bricht diese Schleife ab.
Du willst aber doch was ganz anderes.

Ja, immer wenn eine Zahl durch 2 ohne Rest teilbar ist, soll die Schleife abbrechen, im Prinzip nicht so unterschiedlich.
Außerdem bricht sie nicht ab, sie überspringt die Zahl, die durch 7 ohne Rest teilbar ist und geht weiter zur nächsten.

Gruß
Olli
 
Ums nochmal deutlich zu sagen: Break bricht die komplette Schleife ab, nach einem break gibt es keinen weiteren Durchlauf mehr. Was du suchst, ist wahrscheinlich ein continue. Nach einem continue geht die Schleife sofort zum nächsten Durchlauf über.
 
Ja, immer wenn eine Zahl durch 2 ohne Rest teilbar ist, soll die Schleife abbrechen, im Prinzip nicht so unterschiedlich.
Außerdem bricht sie nicht ab, sie überspringt die Zahl, die durch 7 ohne Rest teilbar ist und geht weiter zur nächsten.

Gruß
Olli

NEIN. Break bricht die Schleife komplett ab. Kein weiterer Durchlauf!

Um die Zahl zu überspringen nimmst du continue; (Schleife zählt hoch und neuer Durchgang)

Müsste dir aber doch alleine auffallen in deinem Beispiel ...

du hast oben angegeben von 22 bis 35 und bei 27 ist schluss .. wenn er wieder einsetzen würde, würde da 29,30 ... 34 stehen.

Edit: Tosian war schneller.
 
Zuletzt bearbeitet:
Ums nochmal deutlich zu sagen: Break bricht die komplette Schleife ab, nach einem break gibt es keinen weiteren Durchlauf mehr. Was du suchst, ist wahrscheinlich ein continue. Nach einem continue geht die Schleife sofort zum nächsten Durchlauf über.

Alles klar, war ne Fehlinterpretation der Funktion.
Vielen Dank.

Gruß
Olli