<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Problem mit einer Menü-Schleife]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>habe ein kleines.. oder auch größeres Problem. Haben in der Schule gerade Kontrollschleifen. Ich schaffe bekomme nur gerade mit einem Problem nicht zurecht.<br />
Wenn statt einer Zahl irgendein Buchstabe eingegeben wird dann wiederholt sich das Menü ununterbrochen. Wie kann ich dies verhindern? Also wenn ich kein Menü habe dann beendet sich das Programm ja Automatisch aber mit dem Menü... nunja. Wäre sehr net wenn mir jemand helfen könnte. Danke schonmal im vor raus.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;stdlib.h&gt;
using namespace std;

long double summe(long double, long double), plusschleife (long double);
long double minusschleife (long double), fakultaet (long double);
int menu (int), plusschleifemR (int), maleins (int);

int main()
{
	int z, mennu=0, grenzeR, kleinmaleins;
    long double fak, n1, n2, grenze;

	do
	{
		z = menu(mennu);

		switch (z)
		{
		case 1: cout &lt;&lt; &quot;Bitte geben Sie n1 ein: &quot;;
				cin &gt;&gt; n1;
				cout &lt;&lt; &quot;Bitte geben Sie n2 ein: &quot;;
				cin &gt;&gt; n2;
				summe (n1, n2);
				break;
		case 2: cout &lt;&lt; &quot;Bitte geben Sie n! ein: &quot;;
				cin &gt;&gt; fak;
				fakultaet (fak);
				break;
		case 3: cout &lt;&lt; &quot;Bitte geben Sie die obere Zaehlgrenze ein: &quot;;
				cin &gt;&gt; grenze;
				plusschleife (grenze);
				break;
		case 4: cout &lt;&lt; &quot;Bitte geben Sie den Wert ein ab dem runtergezaehlt werden soll: &quot;;
				cin &gt;&gt; grenze;
				minusschleife (grenze);
				break;
		case 5: cout &lt;&lt; &quot;Bitte geben Sie die obere Grenze ein: &quot;;
				cin &gt;&gt; grenzeR;
				plusschleifemR (grenzeR);
				break;
		case 6: cout &lt;&lt; &quot;Bitte geben Sie eine Zahl von 1 - 10 ein: &quot;;
				cin &gt;&gt; kleinmaleins;
				maleins (kleinmaleins);
				break;
		default: cout &lt;&lt; &quot;Das Programm wird Beendet!&quot; &lt;&lt; endl;
		}
	} while (z &lt;= 6);

	return 0;
}

int menu (int mennu)
{
		system(&quot;cls&quot;);
		cout &lt;&lt; &quot;---------------------------------------------\n&quot;
			 &lt;&lt; &quot;              --- Schleifen ---              \n&quot;
			 &lt;&lt; &quot;---------------------------------------------\n\n&quot;
			 &lt;&lt; &quot;Berechnungen von Summen und Fakultaeten\n\n&quot;
			 &lt;&lt; &quot;1\t- Summe von n1 bis n2\n&quot;
			 &lt;&lt; &quot;2\t- Faktultaet n!\n&quot;
			 &lt;&lt; &quot;3\t- Zaehlschleife (Plus)\n&quot;
			 &lt;&lt; &quot;4\t- Zaehlschleife (Minus)\n&quot;
			 &lt;&lt; &quot;5\t- Zaehlschleife (Plus) Gauss Lösung\n&quot;
			 &lt;&lt; &quot;6\t- Kleines Ein-Mal-Eins\n\n&quot;
			 &lt;&lt; &quot;sonst\t- Programmende\n\n&quot;;
		cin &gt;&gt; mennu;
		return mennu;
}

long double summe (long double n1, long double n2)
{
	long double ergebnis = 0;

	if (n2 &gt;= n1)
	{
		for (long double i = n2; i &gt;= n1; i--)
		{
			ergebnis += i;
		}
		cout &lt;&lt; &quot;Die Summenrechnung von n1 bis n2 betraegt: &quot; &lt;&lt; ergebnis &lt;&lt; endl;
	}

	else
	{
		cout &lt;&lt; &quot;n2 muss hier groesser sein als n1&quot; &lt;&lt; endl;
	}
	cin.get(); cin.get();
	return 0;
}

long double fakultaet (long double fak)
{
	long double ergebnis = 1;

	for (long double i = fak; i &gt; 0; i--)
	{
		ergebnis *= i;
	}

	cout &lt;&lt; &quot;Die Fakultaet von n! betraegt: &quot; &lt;&lt; ergebnis &lt;&lt; endl;
	cin.get(); cin.get();
	return 0;
}

long double plusschleife (long double grenze)
{
	long double ergebnis = 0;

    cout &lt;&lt; &quot;s = &quot;;

    for (long double x = 1; x &lt;= grenze-1; x++)
	{
        cout &lt;&lt; x &lt;&lt; &quot; + &quot;;
        ergebnis += x;
	}
	ergebnis += grenze;
	cout &lt;&lt; grenze &lt;&lt; &quot; = &quot; &lt;&lt; ergebnis &lt;&lt; endl;
	cin.get(); cin.get();
	return 0;
}

long double minusschleife (long double grenze)
{
    for(long double i = 0; i &lt; grenze; grenze--)
    {
            cout &lt;&lt; grenze &lt;&lt; &quot;, &quot;;
    }

    cout &lt;&lt; grenze &lt;&lt; endl;
	cin.get(); cin.get();
	return 0;
}

int plusschleifemR (int grenze)
{
	int ergebnis = 0;

    cout &lt;&lt; &quot;s = &quot;;
    for (int x = 1; x &lt;= grenze-1; x++)
	{
        cout &lt;&lt; x &lt;&lt; &quot; + &quot;;
        ergebnis += x;
	}
	ergebnis += grenze;

	cout &lt;&lt; grenze &lt;&lt; &quot; = &quot;;

	if (grenze%2==0)
	{
		cout &lt;&lt; grenze/2*(grenze+1) &lt;&lt; endl;
	}
	else
	{
		cout &lt;&lt; ((grenze-1)/2)*(grenze+2)+1 &lt;&lt; endl;
	}
	cin.get(); cin.get();
	return 0;
}

int maleins (int kleinmaleins)
{
    for(int i = 1; i &lt;= 10; i++)
	{
		cout &lt;&lt; setw(6) &lt;&lt; kleinmaleins*i;
	}

	cin.get(); cin.get();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/256691/problem-mit-einer-menü-schleife</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 05:31:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256691.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Dec 2009 14:29:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit einer Menü-Schleife on Wed, 16 Dec 2009 14:30:37 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>habe ein kleines.. oder auch größeres Problem. Haben in der Schule gerade Kontrollschleifen. Ich schaffe bekomme nur gerade mit einem Problem nicht zurecht.<br />
Wenn statt einer Zahl irgendein Buchstabe eingegeben wird dann wiederholt sich das Menü ununterbrochen. Wie kann ich dies verhindern? Also wenn ich kein Menü habe dann beendet sich das Programm ja Automatisch aber mit dem Menü... nunja. Wäre sehr net wenn mir jemand helfen könnte. Danke schonmal im vor raus.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;stdlib.h&gt;
using namespace std;

long double summe(long double, long double), plusschleife (long double);
long double minusschleife (long double), fakultaet (long double);
int menu (int), plusschleifemR (int), maleins (int);

int main()
{
	int z, mennu=0, grenzeR, kleinmaleins;
    long double fak, n1, n2, grenze;

	do
	{
		z = menu(mennu);

		switch (z)
		{
		case 1: cout &lt;&lt; &quot;Bitte geben Sie n1 ein: &quot;;
				cin &gt;&gt; n1;
				cout &lt;&lt; &quot;Bitte geben Sie n2 ein: &quot;;
				cin &gt;&gt; n2;
				summe (n1, n2);
				break;
		case 2: cout &lt;&lt; &quot;Bitte geben Sie n! ein: &quot;;
				cin &gt;&gt; fak;
				fakultaet (fak);
				break;
		case 3: cout &lt;&lt; &quot;Bitte geben Sie die obere Zaehlgrenze ein: &quot;;
				cin &gt;&gt; grenze;
				plusschleife (grenze);
				break;
		case 4: cout &lt;&lt; &quot;Bitte geben Sie den Wert ein ab dem runtergezaehlt werden soll: &quot;;
				cin &gt;&gt; grenze;
				minusschleife (grenze);
				break;
		case 5: cout &lt;&lt; &quot;Bitte geben Sie die obere Grenze ein: &quot;;
				cin &gt;&gt; grenzeR;
				plusschleifemR (grenzeR);
				break;
		case 6: cout &lt;&lt; &quot;Bitte geben Sie eine Zahl von 1 - 10 ein: &quot;;
				cin &gt;&gt; kleinmaleins;
				maleins (kleinmaleins);
				break;
		default: cout &lt;&lt; &quot;Das Programm wird Beendet!&quot; &lt;&lt; endl;
		}
	} while (z &lt;= 6);

	return 0;
}

int menu (int mennu)
{
		system(&quot;cls&quot;);
		cout &lt;&lt; &quot;---------------------------------------------\n&quot;
			 &lt;&lt; &quot;              --- Schleifen ---              \n&quot;
			 &lt;&lt; &quot;---------------------------------------------\n\n&quot;
			 &lt;&lt; &quot;Berechnungen von Summen und Fakultaeten\n\n&quot;
			 &lt;&lt; &quot;1\t- Summe von n1 bis n2\n&quot;
			 &lt;&lt; &quot;2\t- Faktultaet n!\n&quot;
			 &lt;&lt; &quot;3\t- Zaehlschleife (Plus)\n&quot;
			 &lt;&lt; &quot;4\t- Zaehlschleife (Minus)\n&quot;
			 &lt;&lt; &quot;5\t- Zaehlschleife (Plus) Gauss Lösung\n&quot;
			 &lt;&lt; &quot;6\t- Kleines Ein-Mal-Eins\n\n&quot;
			 &lt;&lt; &quot;sonst\t- Programmende\n\n&quot;;
		cin &gt;&gt; mennu;
		return mennu;
}

long double summe (long double n1, long double n2)
{
	long double ergebnis = 0;

	if (n2 &gt;= n1)
	{
		for (long double i = n2; i &gt;= n1; i--)
		{
			ergebnis += i;
		}
		cout &lt;&lt; &quot;Die Summenrechnung von n1 bis n2 betraegt: &quot; &lt;&lt; ergebnis &lt;&lt; endl;
	}

	else
	{
		cout &lt;&lt; &quot;n2 muss hier groesser sein als n1&quot; &lt;&lt; endl;
	}
	cin.get(); cin.get();
	return 0;
}

long double fakultaet (long double fak)
{
	long double ergebnis = 1;

	for (long double i = fak; i &gt; 0; i--)
	{
		ergebnis *= i;
	}

	cout &lt;&lt; &quot;Die Fakultaet von n! betraegt: &quot; &lt;&lt; ergebnis &lt;&lt; endl;
	cin.get(); cin.get();
	return 0;
}

long double plusschleife (long double grenze)
{
	long double ergebnis = 0;

    cout &lt;&lt; &quot;s = &quot;;

    for (long double x = 1; x &lt;= grenze-1; x++)
	{
        cout &lt;&lt; x &lt;&lt; &quot; + &quot;;
        ergebnis += x;
	}
	ergebnis += grenze;
	cout &lt;&lt; grenze &lt;&lt; &quot; = &quot; &lt;&lt; ergebnis &lt;&lt; endl;
	cin.get(); cin.get();
	return 0;
}

long double minusschleife (long double grenze)
{
    for(long double i = 0; i &lt; grenze; grenze--)
    {
            cout &lt;&lt; grenze &lt;&lt; &quot;, &quot;;
    }

    cout &lt;&lt; grenze &lt;&lt; endl;
	cin.get(); cin.get();
	return 0;
}

int plusschleifemR (int grenze)
{
	int ergebnis = 0;

    cout &lt;&lt; &quot;s = &quot;;
    for (int x = 1; x &lt;= grenze-1; x++)
	{
        cout &lt;&lt; x &lt;&lt; &quot; + &quot;;
        ergebnis += x;
	}
	ergebnis += grenze;

	cout &lt;&lt; grenze &lt;&lt; &quot; = &quot;;

	if (grenze%2==0)
	{
		cout &lt;&lt; grenze/2*(grenze+1) &lt;&lt; endl;
	}
	else
	{
		cout &lt;&lt; ((grenze-1)/2)*(grenze+2)+1 &lt;&lt; endl;
	}
	cin.get(); cin.get();
	return 0;
}

int maleins (int kleinmaleins)
{
    for(int i = 1; i &lt;= 10; i++)
	{
		cout &lt;&lt; setw(6) &lt;&lt; kleinmaleins*i;
	}

	cin.get(); cin.get();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1823527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1823527</guid><dc:creator><![CDATA[Althi]]></dc:creator><pubDate>Wed, 16 Dec 2009 14:30:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einer Menü-Schleife on Wed, 16 Dec 2009 15:19:44 GMT]]></title><description><![CDATA[<p>Das kann man zum Beispiel so machen:</p>
<pre><code class="language-cpp">long double summe(long double, long double), plusschleife (long double);
long double minusschleife (long double), fakultaet (long double);
char menu ();         // Hier habe ich die Signatur geändert
int plusschleifemR (int), maleins (int);

int main()
{
    int grenzeR, kleinmaleins;
    long double fak, n1, n2, grenze;
    bool exit=false;  // Dies habe ich hinzugefügt
    do
    {
        char z = menu();  // Ich abe den Typ von z geändert

        switch (z)
        {
        // Die cases habe ich jeweils von int nach char geändert
        case '1': cout &lt;&lt; &quot;Bitte geben Sie n1 ein: &quot;;
                cin &gt;&gt; n1;
                cout &lt;&lt; &quot;Bitte geben Sie n2 ein: &quot;;
                cin &gt;&gt; n2;
                summe (n1, n2);
                break;
        case '2': cout &lt;&lt; &quot;Bitte geben Sie n! ein: &quot;;
                cin &gt;&gt; fak;
                fakultaet (fak);
                break;
        case '3': cout &lt;&lt; &quot;Bitte geben Sie die obere Zaehlgrenze ein: &quot;;
                cin &gt;&gt; grenze;
                plusschleife (grenze);
                break;
        case '4': cout &lt;&lt; &quot;Bitte geben Sie den Wert ein ab dem runtergezaehlt werden soll: &quot;;
                cin &gt;&gt; grenze;
                minusschleife (grenze);
                break;
        case '5': cout &lt;&lt; &quot;Bitte geben Sie die obere Grenze ein: &quot;;
                cin &gt;&gt; grenzeR;
                plusschleifemR (grenzeR);
                break;
        case '6': cout &lt;&lt; &quot;Bitte geben Sie eine Zahl von 1 - 10 ein: &quot;;
                cin &gt;&gt; kleinmaleins;
                maleins (kleinmaleins);
                break;
        default: cout &lt;&lt; &quot;Das Programm wird Beendet!&quot; &lt;&lt; endl;
	         exit = true;       // Das hier habe ich hinzugefügt
        }
    } while (!exit);                // Hier habe ich die Abbruchbedingung geändert

    return 0;
}

char menu ()
{
        system(&quot;cls&quot;);
        cout &lt;&lt; &quot;---------------------------------------------\n&quot;
             &lt;&lt; &quot;              --- Schleifen ---              \n&quot;
             &lt;&lt; &quot;---------------------------------------------\n\n&quot;
             &lt;&lt; &quot;Berechnungen von Summen und Fakultaeten\n\n&quot;
             &lt;&lt; &quot;1\t- Summe von n1 bis n2\n&quot;
             &lt;&lt; &quot;2\t- Faktultaet n!\n&quot;
             &lt;&lt; &quot;3\t- Zaehlschleife (Plus)\n&quot;
             &lt;&lt; &quot;4\t- Zaehlschleife (Minus)\n&quot;
             &lt;&lt; &quot;5\t- Zaehlschleife (Plus) Gauss Lösung\n&quot;
             &lt;&lt; &quot;6\t- Kleines Ein-Mal-Eins\n\n&quot;
             &lt;&lt; &quot;sonst\t- Programmende\n\n&quot;;
	char mennu;      // Hier habe ich den Typ von mennu geändert
        cin &gt;&gt; mennu;
        return mennu;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1823550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1823550</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 16 Dec 2009 15:19:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einer Menü-Schleife on Wed, 16 Dec 2009 15:17:44 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">bool goon=true;
do
{
    z = menu(mennu);
</code></pre>
<pre><code class="language-cpp">default: cout &lt;&lt; &quot;Das Programm wird Beendet!&quot; &lt;&lt; endl;
		   goon=false;
        }
    } while (goon);
</code></pre>
<p>PS: Du solltest dein Fehlerhandling verbessern, z.B. bei eingegebenen Buchstaben (Endlosschleife), negativen Zahl oder Kommazahlen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1823551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1823551</guid><dc:creator><![CDATA[DarkShadow44]]></dc:creator><pubDate>Wed, 16 Dec 2009 15:17:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einer Menü-Schleife on Wed, 16 Dec 2009 15:45:06 GMT]]></title><description><![CDATA[<p>Super, es funktioniert... auf die &quot;char&quot; variante bin ich gar nicht gekommen -.-<br />
Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Aber jetzt eine andere Frage, auf das gleiche Problem bezogen, wenn ich ja nun einen Buchstaben eingebe beendet sich ja das gesamte Programm. Wie bekomme ich es hin das er, wenn ich in irgendeiner der Aufgaben, statt einer Zahl, einen Buchstaben eingebe dann zum Menü zurückgeht.</p>
<p>Am liebsten wären mir erstmal Ideen, da ich momentan keine habe, ausser entweder mit einem &quot;goto&quot; oder mit einer wahrschleife für fast jede Zahleneingabe.</p>
<p>Was könnte man da machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1823567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1823567</guid><dc:creator><![CDATA[Althi]]></dc:creator><pubDate>Wed, 16 Dec 2009 15:45:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einer Menü-Schleife on Wed, 16 Dec 2009 15:53:54 GMT]]></title><description><![CDATA[<p>Althi schrieb:</p>
<blockquote>
<p>Super, es funktioniert... auf die &quot;char&quot; variante bin ich gar nicht gekommen -.-<br />
Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Aber jetzt eine andere Frage, auf das gleiche Problem bezogen, wenn ich ja nun einen Buchstaben eingebe beendet sich ja das gesamte Programm. Wie bekomme ich es hin das er, wenn ich in irgendeiner der Aufgaben, statt einer Zahl, einen Buchstaben eingebe dann zum Menü zurückgeht.</p>
<p>Am liebsten wären mir erstmal Ideen, da ich momentan keine habe, ausser entweder mit einem &quot;goto&quot; oder mit einer wahrschleife für fast jede Zahleneingabe.</p>
<p>Was könnte man da machen?</p>
</blockquote>
<p>Vorschlag: In den Unteraufgaben prüfst du nach dem Einlesen der Zahl, ob der cin-stream noch in Ordnung ist ( if (cin) ... ). Denn wenn du einen Buchstaben eingibst, wenn eine Zahl erwartet wird, dann wird das failbit gesetzt. Wenn das der Fall ist, machst du einfach return und schon bist du zurück in deiner Menüschleife. Vergiss aber nicht, vor dem return den stream wieder in Ordnung zu bringen und die (noch nicht eingelesenen) Buchstaben daraus zu entfernen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1823575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1823575</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 16 Dec 2009 15:53:54 GMT</pubDate></item></channel></rss>