Beispiel 7: Beenden von Schleifen

24.10.2016 04:31 Uhr

Break

#include <iostream>

using namespace std;

int main()
{
char roemisch[10];
char roemischeZiffern[8] = "ivxlcdm";
int ziffernWert[7] = {1, 5, 10, 50, 100, 500, 1000};
int arabisch;


cout << "Bitte geben Sie eine Römische Zahl ein: ";
cin >> roemisch;

arabisch = 0;
for (int i = 0, j; roemisch[i]!='\0'; i++)
    {
    for (j = 0; j < 7; j++)
        if (roemisch[i] == roemischeZiffern[j])
           {
           arabisch += ziffernWert[j];
           break;

           }
    if (j == 7)
       cout << "Fehler!" << endl <<
               "In Ihrer Eingabe " << roemisch << " ist " << roemisch[i] <<
               " keine römische Ziffer.";
    }

cout << roemisch << " in roemischer Notation entspricht " <<

        arabisch << " in arabischer." << endl;

return 0;
}

Häufig ist es wichtig, zu wissen, ob eine Schleife erfolgreich beendet wurde.

Hierzu gibt es mehrere Mittel: Die break Anweisung verläßt die innerste for (oder while) Schleife, in der Sie sich befindet. break beendet also die innerenicht die äußere for-Schleife.


Endbedingung


#include <iostream>

using namespace std;

int main()
{
char roemisch[10];
char roemischeZiffern[8] = "ivxlcdm";
int ziffernWert[7] = {1, 5, 10, 50, 100, 500, 1000};
int arabisch;


cout << "Bitte geben Sie eine Römische Zahl ein: ";
cin >> roemisch;

arabisch = 0;
for (int i = 0, j; roemisch[i]!='\0'; i++)
    {
    for (j = 0; j < 7; j++)
        if (roemisch[i] == roemischeZiffern[j])
           {
           arabisch += ziffernWert[j];
           break;
           }
    if (j == 7)
       cout << "Fehler!" << endl <<

               "In Ihrer Eingabe " << roemisch << " ist " << roemisch[i] <<
               " keine römische Ziffer.";
    }

cout << roemisch << " in roemischer Notation entspricht " <<
        arabisch << " in arabischer." << endl;

return 0;
}

Um zu prüfen, ob eine Schleife „regulär“, d.h., durch Erreichung der Endbedingung oder „irregulär“, d.h., durch ein break im Rumpf der Schleife geendet hat, prüft man die Endbedingung nach Verlassen der Schleife nochmals.


Geltungsbereich- / Scope-Regeln

#include <iostream>

using namespace std;

int main()
{
char roemisch[10];
char roemischeZiffern[8] = "ivxlcdm";
int ziffernWert[7] = {1, 5, 10, 50, 100, 500, 1000};
int arabisch;


cout << "Bitte geben Sie eine Römische Zahl ein: ";
cin >> roemisch;

arabisch = 0;
for (int i = 0, j; roemisch[i]!='\0'; i++)
    {
    for (j = 0;j < 7; j++)
        if (roemisch[i] == roemischeZiffern[j])
           {
           arabisch += ziffernWert[j];
           break;
           }
    if (j == 7)
       cout << "Fehler!" << endl <<

               "In Ihrer Eingabe " << roemisch << " ist " << roemisch[i] <<
               " keine römische Ziffer.";
    }

cout << roemisch << " in roemischer Notation entspricht " <<
        arabisch << " in arabischer." << endl;

return 0;
}

Dies ist ein gutes Beispiel um Ihr Verständnis für die Geltungsbereich- oder Scope-Regeln zu verbessern.

Beachten Sie, daß j in der äußeren for-Schleife definiert, jedoch in der inneren initialisiert wird. Wäre dies nicht so, d.h., würden wir Definition und Initialisierung in der inneren for-Schleife zusammen fassen, so wäre j, wenn es schließlich verwendet wird, nicht mehr bekannt.