<?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[Integer Werte mit cin einlesen, Buchstaben ignorieren (nicht einlesen)?]]></title><description><![CDATA[<p>Hallo Experten!</p>
<p>Ich schreibe gerade ein Programm welches Preise und Mengen einliest und die Bestellmenge und den Gesamtpreis ausgibt. Dabei möchte ich, dass nur Zahlen eingegeben werden sollen. Auch die Eingabe von 0 soll nicht erlaubt sein. Ich habe es auch schon wie folgt gelöst:</p>
<pre><code>do {

			cout &lt;&lt; &quot;Bitte den Preis pro Fass angeben: &quot;;
			cin &gt;&gt; preis;

			if (preis &lt;= 0)
				do {

					cout &lt;&lt; &quot;Ungueltige Eingabe, bitte wiederholen!\n&quot;;
					cin.clear();
					cin.ignore(cin.rdbuf()-&gt;in_avail());
					cin &gt;&gt; preis;
				} while (preis &lt;= 0);
		} while (preis &lt;= 0);

		cout &lt;&lt; &quot;Fassvolumen in Liter eingeben: \n&quot;;
		cin &gt;&gt; volumen;

		if (volumen &lt;= 0)
			do {

				cout &lt;&lt; &quot;Ungueltige Eingabe, bitte wiederholen!\n&quot;;
				cin.clear();
				cin.ignore(cin.rdbuf()-&gt;in_avail());

				cin &gt;&gt; volumen;
			} while (volumen &lt;= 0);
</code></pre>
<p>Das funktioniert so auch, nur gibt es ein Problem:<br />
Bei der Eingabe eines Preises von &quot;25R&quot; , wird 25 als Preis eingelesen und der Buchstabe R wird beim Volumen eingelesen. Dies führt natürlich zu einer Fehlermeldung biem Volumen. Ich möchte aber, dass &quot;25R&quot; beim Preis eingelesen wird und eine Fehlermeldung beim Preis ausgeworfen wird. Wie schaffe ich, dass das R von 25R noch beim Preis eingelesen wird? Ich hoffe es ist halbwegs verständlich, was ich meine! <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="🙂"
    /> LG</p>
<p>Anbei noch mein gesamtes Programm falls benötigt:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

int main() {

	char neu = 'n';
	int volumen, menge, stueck, preis;

	do { 
		do {

			cout &lt;&lt; &quot;Bitte den Preis pro Fass angeben: &quot;;
			cin &gt;&gt; preis;

			if (preis &lt;= 0)
				do {

					cout &lt;&lt; &quot;Ungueltige Eingabe, bitte wiederholen!\n&quot;;
					cin.clear();
					cin.ignore(cin.rdbuf()-&gt;in_avail());
					cin &gt;&gt; preis;
				} while (preis &lt;= 0);
		} while (preis &lt;= 0);

		cout &lt;&lt; &quot;Fassvolumen in Liter eingeben: \n&quot;;
		cin &gt;&gt; volumen;

		if (volumen &lt;= 0)
			do {

				cout &lt;&lt; &quot;Ungueltige Eingabe, bitte wiederholen!\n&quot;;
				cin.clear();
				cin.ignore(cin.rdbuf()-&gt;in_avail());

				cin &gt;&gt; volumen;
			} while (volumen &lt;= 0);

			cout &lt;&lt; &quot;Bitte bestellte Menge in Liter eingeben: \n&quot;;
			cin &gt;&gt; menge;
			if (menge &lt;= 0 || menge &lt; volumen)
				do {
					cout &lt;&lt; &quot;Ungueltige Eingabe, bitte wiederholen! (Mindestbestellmenge?) \n&quot;;
					cin.clear();
					cin.ignore(cin.rdbuf()-&gt;in_avail());

					cin &gt;&gt; menge;

					if (menge &lt; volumen)
						do {
							cout &lt;&lt; &quot;Ungueltige Eingabe, bitte wiederholen! (Bestellemnge?) \n&quot;;
							cin.clear();
							cin.ignore(cin.rdbuf()-&gt;in_avail());

							cin &gt;&gt; menge;
						} while (menge &lt; volumen);
				} while (menge &lt;= 0);

				stueck = menge / volumen;

				if ((menge % volumen) == 0)
					do {
						cout &lt;&lt; &quot;Der Kunde bezahlt &quot; &lt;&lt; stueck * preis &lt;&lt; &quot; EUR und bekommt &quot; &lt;&lt; stueck &lt;&lt; &quot; Fass Bier! \n&quot;;
						menge = 0;
					} while (menge != 0);

				else if ((menge % volumen) != 0)
					do {

						cout &lt;&lt; &quot;Der Kunde bezahlt  &quot; &lt;&lt; (stueck+1) * preis &lt;&lt; &quot; EUR und bekommt &quot; &lt;&lt;  stueck + 1 &lt;&lt; &quot; Fasss bier! \n ACHTUNG: &quot; &lt;&lt; volumen - (menge %volumen) &lt;&lt; &quot; Liter werden aufgrund Fassvolumens zusaetzlich geliefert und verrechnet! \n&quot;;
						menge = 0;
					} while (menge != 0);

		cout &lt;&lt; &quot;Programm mit Eingabe von j neustarten. \n&quot;;
		cin &gt;&gt; neu;
		menge = 0;
		volumen = 0;
	}

	while (neu == 'j');

	cout &lt;&lt; &quot;Danke, dass Sie Min's Top Bierkalkulator verwendet haben! \n&quot;;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/337105/integer-werte-mit-cin-einlesen-buchstaben-ignorieren-nicht-einlesen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 10:02:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/337105.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 Mar 2016 11:20:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Integer Werte mit cin einlesen, Buchstaben ignorieren (nicht einlesen)? on Tue, 08 Mar 2016 11:20:18 GMT]]></title><description><![CDATA[<p>Hallo Experten!</p>
<p>Ich schreibe gerade ein Programm welches Preise und Mengen einliest und die Bestellmenge und den Gesamtpreis ausgibt. Dabei möchte ich, dass nur Zahlen eingegeben werden sollen. Auch die Eingabe von 0 soll nicht erlaubt sein. Ich habe es auch schon wie folgt gelöst:</p>
<pre><code>do {

			cout &lt;&lt; &quot;Bitte den Preis pro Fass angeben: &quot;;
			cin &gt;&gt; preis;

			if (preis &lt;= 0)
				do {

					cout &lt;&lt; &quot;Ungueltige Eingabe, bitte wiederholen!\n&quot;;
					cin.clear();
					cin.ignore(cin.rdbuf()-&gt;in_avail());
					cin &gt;&gt; preis;
				} while (preis &lt;= 0);
		} while (preis &lt;= 0);

		cout &lt;&lt; &quot;Fassvolumen in Liter eingeben: \n&quot;;
		cin &gt;&gt; volumen;

		if (volumen &lt;= 0)
			do {

				cout &lt;&lt; &quot;Ungueltige Eingabe, bitte wiederholen!\n&quot;;
				cin.clear();
				cin.ignore(cin.rdbuf()-&gt;in_avail());

				cin &gt;&gt; volumen;
			} while (volumen &lt;= 0);
</code></pre>
<p>Das funktioniert so auch, nur gibt es ein Problem:<br />
Bei der Eingabe eines Preises von &quot;25R&quot; , wird 25 als Preis eingelesen und der Buchstabe R wird beim Volumen eingelesen. Dies führt natürlich zu einer Fehlermeldung biem Volumen. Ich möchte aber, dass &quot;25R&quot; beim Preis eingelesen wird und eine Fehlermeldung beim Preis ausgeworfen wird. Wie schaffe ich, dass das R von 25R noch beim Preis eingelesen wird? Ich hoffe es ist halbwegs verständlich, was ich meine! <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="🙂"
    /> LG</p>
<p>Anbei noch mein gesamtes Programm falls benötigt:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

int main() {

	char neu = 'n';
	int volumen, menge, stueck, preis;

	do { 
		do {

			cout &lt;&lt; &quot;Bitte den Preis pro Fass angeben: &quot;;
			cin &gt;&gt; preis;

			if (preis &lt;= 0)
				do {

					cout &lt;&lt; &quot;Ungueltige Eingabe, bitte wiederholen!\n&quot;;
					cin.clear();
					cin.ignore(cin.rdbuf()-&gt;in_avail());
					cin &gt;&gt; preis;
				} while (preis &lt;= 0);
		} while (preis &lt;= 0);

		cout &lt;&lt; &quot;Fassvolumen in Liter eingeben: \n&quot;;
		cin &gt;&gt; volumen;

		if (volumen &lt;= 0)
			do {

				cout &lt;&lt; &quot;Ungueltige Eingabe, bitte wiederholen!\n&quot;;
				cin.clear();
				cin.ignore(cin.rdbuf()-&gt;in_avail());

				cin &gt;&gt; volumen;
			} while (volumen &lt;= 0);

			cout &lt;&lt; &quot;Bitte bestellte Menge in Liter eingeben: \n&quot;;
			cin &gt;&gt; menge;
			if (menge &lt;= 0 || menge &lt; volumen)
				do {
					cout &lt;&lt; &quot;Ungueltige Eingabe, bitte wiederholen! (Mindestbestellmenge?) \n&quot;;
					cin.clear();
					cin.ignore(cin.rdbuf()-&gt;in_avail());

					cin &gt;&gt; menge;

					if (menge &lt; volumen)
						do {
							cout &lt;&lt; &quot;Ungueltige Eingabe, bitte wiederholen! (Bestellemnge?) \n&quot;;
							cin.clear();
							cin.ignore(cin.rdbuf()-&gt;in_avail());

							cin &gt;&gt; menge;
						} while (menge &lt; volumen);
				} while (menge &lt;= 0);

				stueck = menge / volumen;

				if ((menge % volumen) == 0)
					do {
						cout &lt;&lt; &quot;Der Kunde bezahlt &quot; &lt;&lt; stueck * preis &lt;&lt; &quot; EUR und bekommt &quot; &lt;&lt; stueck &lt;&lt; &quot; Fass Bier! \n&quot;;
						menge = 0;
					} while (menge != 0);

				else if ((menge % volumen) != 0)
					do {

						cout &lt;&lt; &quot;Der Kunde bezahlt  &quot; &lt;&lt; (stueck+1) * preis &lt;&lt; &quot; EUR und bekommt &quot; &lt;&lt;  stueck + 1 &lt;&lt; &quot; Fasss bier! \n ACHTUNG: &quot; &lt;&lt; volumen - (menge %volumen) &lt;&lt; &quot; Liter werden aufgrund Fassvolumens zusaetzlich geliefert und verrechnet! \n&quot;;
						menge = 0;
					} while (menge != 0);

		cout &lt;&lt; &quot;Programm mit Eingabe von j neustarten. \n&quot;;
		cin &gt;&gt; neu;
		menge = 0;
		volumen = 0;
	}

	while (neu == 'j');

	cout &lt;&lt; &quot;Danke, dass Sie Min's Top Bierkalkulator verwendet haben! \n&quot;;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2489687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2489687</guid><dc:creator><![CDATA[mistertool]]></dc:creator><pubDate>Tue, 08 Mar 2016 11:20:18 GMT</pubDate></item><item><title><![CDATA[Reply to Integer Werte mit cin einlesen, Buchstaben ignorieren (nicht einlesen)? on Tue, 08 Mar 2016 11:47:59 GMT]]></title><description><![CDATA[<p>Das bei der Eingabe über den &gt;&gt; Operator nur bis zu dem Zeichen gelesen wird das noch eine Zahl ist kann man nach meinem Wissen nicht abschalten. Du wirst also wohl per <code>getline</code> immer eine Zeile einlesen müssen und dann per <code>stoi</code> zu einem <code>int</code> konvertieren. Dort kannst du am <code>pos</code> Parameter sehen ob wirklich die ganze Zeile konvertiert wurde.</p>
<p>Im übrigen solltest du nochmal deine Schleifen ein wenig umstrukturieren. Eine Konstruktion wie</p>
<pre><code>if(x)
{
  do
  {
    // zeug...
  } while(x);
}
</code></pre>
<p>ist eigentlich ein</p>
<pre><code>while(x) { // zeug }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2489691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2489691</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Tue, 08 Mar 2016 11:47:59 GMT</pubDate></item><item><title><![CDATA[Reply to Integer Werte mit cin einlesen, Buchstaben ignorieren (nicht einlesen)? on Tue, 08 Mar 2016 13:27:24 GMT]]></title><description><![CDATA[<p>Danke, ich werd mir die von dir geposteten Befehle mal anschauen (kenne diese noch nicht, aber learning by doing ist ja nicht ganz so schlecht :)) und die Schleifen umbauen. Bin noch ein absoluter Laie und dankbar für jedes Feedback!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2489699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2489699</guid><dc:creator><![CDATA[mistertool]]></dc:creator><pubDate>Tue, 08 Mar 2016 13:27:24 GMT</pubDate></item><item><title><![CDATA[Reply to Integer Werte mit cin einlesen, Buchstaben ignorieren (nicht einlesen)? on Tue, 08 Mar 2016 19:19:23 GMT]]></title><description><![CDATA[<p>@TE, Was den Standard Input angeht soll <code>std::cin.rdbuf()-&gt;in_avail()</code> immer 0 zurückgeben, erzielt also nicht den gewünschten Effekt. Besser du benutzt <code>std::numeric_limits&lt;std::streamsize&gt;::max()</code> und ignorierst alles bis zum nächsten Zeilenumbruch, statt EOF.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2489726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2489726</guid><dc:creator><![CDATA[aquaviva]]></dc:creator><pubDate>Tue, 08 Mar 2016 19:19:23 GMT</pubDate></item><item><title><![CDATA[Reply to Integer Werte mit cin einlesen, Buchstaben ignorieren (nicht einlesen)? on Wed, 16 Mar 2016 14:09:31 GMT]]></title><description><![CDATA[<p>Danke für die Hilfe. Habe mich mit dem Problem mittlerweile abgefunden. Habe allerdings eine bessere Lösung gefunden wie ich Buchstaben zurückwerfen lassen kann:</p>
<pre><code>double lang;
char dummy;

while (cin.fail()) {
00030: cin.clear();
00031: cin &gt;&gt; dummy;
00032: cout &lt;&lt; &quot;Ungueltige Eingabe bitte wiederholen: &quot; &lt;&lt; endl;
00033: cin &gt;&gt; lang;
00034: }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2490562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2490562</guid><dc:creator><![CDATA[mistertool]]></dc:creator><pubDate>Wed, 16 Mar 2016 14:09:31 GMT</pubDate></item></channel></rss>