<?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[if &amp;amp; std::cin]]></title><description><![CDATA[<p>Hallo, ich versuche gerade eine Adressbuch zu schreiben. Und zwar habe ich eine frage und zwar habe ich mehre if Anweisungen die eine Eingabe bearbeiten. Jedoch sobald innerhalb des if ein std::cin (Z.13)vor kommt wird das else (Z.27)trotzdem ausgeführt. Wieso ist das so? Was muss ich anders machen?</p>
<pre><code>std::array &lt; std::string, 10 &gt; word_of_string(std::string s_in){
	std::array&lt; std::string, 10 &gt; s_aaa;
	unsigned int j=0,last_length=0;
	for(unsigned int i=0;i&lt;=s_in.length();++i){
		if(s_in[i]==' '||s_in.length()==i){
			for(unsigned int ii=last_length;i&gt;ii;++ii){
				s_aaa[j]+=s_in[ii];
			}
			last_length=i+1;
			++j;
		}
	}
	return s_aaa;
}
</code></pre>
<pre><code>std::string s_in;
std::cout&lt;&lt;&quot;&gt;&quot;;
std::getline (std::cin, s_in);

while(s_in!=&quot;q&quot;){
	std::array&lt; std::string,10&gt; s_in_list=word_of_string(s_in);
	if(s_in_list[0]==&quot;load&quot;){
		int a;std::cin&gt;&gt;a;
	}else if(s_in_list[0]==&quot;create&quot;){
		if(s_in_list[1]==&quot;entry&quot;||s_in_list[1]==&quot;address&quot;){
			std::string s_name,s_first_name,s_birthday,s_street,s_email;
			unsigned int i_postal_code=0,i_house_number=0;
			std::cout&lt;&lt;&quot;name:&quot;;        std::cin&gt;&gt;s_name;
			std::cout&lt;&lt;&quot;first name:&quot;;  std::cin&gt;&gt;s_first_name;
			std::cout&lt;&lt;&quot;birthday:&quot;;    std::cin&gt;&gt;s_birthday;
			std::cout&lt;&lt;&quot;postal code:&quot;; std::cin&gt;&gt;i_postal_code;
			std::cout&lt;&lt;&quot;street:&quot;;      std::cin&gt;&gt;s_street;
			std::cout&lt;&lt;&quot;house number:&quot;;std::cin&gt;&gt;i_house_number;
			std::cout&lt;&lt;&quot;email:&quot;;       std::cin&gt;&gt;s_email;
			address_book.push_back(Entry(s_name,s_first_name,s_birthday,s_email,s_street,i_postal_code,i_house_number));
		}else{
			//error
		}
	}
	...
	else{
		std::cout&lt;&lt;&quot;error:Not accepted input\n&quot;;
	}

	std::cout&lt;&lt;&quot;&gt;&quot;;
	std::getline (std::cin, s_in);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/326432/if-amp-std-cin</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Jul 2026 23:47:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326432.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Jun 2014 21:14:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to if &amp;amp; std::cin on Tue, 17 Jun 2014 21:15:38 GMT]]></title><description><![CDATA[<p>Hallo, ich versuche gerade eine Adressbuch zu schreiben. Und zwar habe ich eine frage und zwar habe ich mehre if Anweisungen die eine Eingabe bearbeiten. Jedoch sobald innerhalb des if ein std::cin (Z.13)vor kommt wird das else (Z.27)trotzdem ausgeführt. Wieso ist das so? Was muss ich anders machen?</p>
<pre><code>std::array &lt; std::string, 10 &gt; word_of_string(std::string s_in){
	std::array&lt; std::string, 10 &gt; s_aaa;
	unsigned int j=0,last_length=0;
	for(unsigned int i=0;i&lt;=s_in.length();++i){
		if(s_in[i]==' '||s_in.length()==i){
			for(unsigned int ii=last_length;i&gt;ii;++ii){
				s_aaa[j]+=s_in[ii];
			}
			last_length=i+1;
			++j;
		}
	}
	return s_aaa;
}
</code></pre>
<pre><code>std::string s_in;
std::cout&lt;&lt;&quot;&gt;&quot;;
std::getline (std::cin, s_in);

while(s_in!=&quot;q&quot;){
	std::array&lt; std::string,10&gt; s_in_list=word_of_string(s_in);
	if(s_in_list[0]==&quot;load&quot;){
		int a;std::cin&gt;&gt;a;
	}else if(s_in_list[0]==&quot;create&quot;){
		if(s_in_list[1]==&quot;entry&quot;||s_in_list[1]==&quot;address&quot;){
			std::string s_name,s_first_name,s_birthday,s_street,s_email;
			unsigned int i_postal_code=0,i_house_number=0;
			std::cout&lt;&lt;&quot;name:&quot;;        std::cin&gt;&gt;s_name;
			std::cout&lt;&lt;&quot;first name:&quot;;  std::cin&gt;&gt;s_first_name;
			std::cout&lt;&lt;&quot;birthday:&quot;;    std::cin&gt;&gt;s_birthday;
			std::cout&lt;&lt;&quot;postal code:&quot;; std::cin&gt;&gt;i_postal_code;
			std::cout&lt;&lt;&quot;street:&quot;;      std::cin&gt;&gt;s_street;
			std::cout&lt;&lt;&quot;house number:&quot;;std::cin&gt;&gt;i_house_number;
			std::cout&lt;&lt;&quot;email:&quot;;       std::cin&gt;&gt;s_email;
			address_book.push_back(Entry(s_name,s_first_name,s_birthday,s_email,s_street,i_postal_code,i_house_number));
		}else{
			//error
		}
	}
	...
	else{
		std::cout&lt;&lt;&quot;error:Not accepted input\n&quot;;
	}

	std::cout&lt;&lt;&quot;&gt;&quot;;
	std::getline (std::cin, s_in);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2404323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404323</guid><dc:creator><![CDATA[MaCo]]></dc:creator><pubDate>Tue, 17 Jun 2014 21:15:38 GMT</pubDate></item><item><title><![CDATA[Reply to if &amp;amp; std::cin on Tue, 17 Jun 2014 21:45:28 GMT]]></title><description><![CDATA[<p>Edit: Alles krasser Quatsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404325</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 17 Jun 2014 21:45:28 GMT</pubDate></item><item><title><![CDATA[Reply to if &amp;amp; std::cin on Tue, 17 Jun 2014 21:36:05 GMT]]></title><description><![CDATA[<p>Das mit ja auch eigtliche so bewusst, jedoch so bald innerhalb des if zB: Z.13 ein cin vor kommt wirt &quot;error:Not accepted input&quot;(Z.27) ausgeben.wen ich das cin weg lasse dann nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404329</guid><dc:creator><![CDATA[MaCo]]></dc:creator><pubDate>Tue, 17 Jun 2014 21:36:05 GMT</pubDate></item><item><title><![CDATA[Reply to if &amp;amp; std::cin on Tue, 17 Jun 2014 21:41:30 GMT]]></title><description><![CDATA[<p>Gib mal ein <a href="http://www.c-plusplus.net/forum/304133" rel="nofollow">vollständiges Minimalbeispiel</a>, erklär was du tust, was du erwartest, was stattdessen passiert. Möglichst auch in lesbar. Code wie <code>s_aaa[j]+=s_in[ii];</code> wirkt eher wie <a href="http://www.ioccc.org/" rel="nofollow">IOCCC</a>-Material. Kein Wunder, wenn du da selber den Überblick verlierst, was, wann, wo, warum passiert (diese vier Dinge musst du aber genau wissen über deine Programme).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404331</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 17 Jun 2014 21:41:30 GMT</pubDate></item><item><title><![CDATA[Reply to if &amp;amp; std::cin on Tue, 17 Jun 2014 22:18:17 GMT]]></title><description><![CDATA[<p>Um alle Wörter eines Strings in einem Array zu speichern, nimm lieber mal (anstatt deines Ansatzes mit <code>word_of_strings</code> )</p>
<pre><code>std::istringstream stream(s_in); // benötigt &lt;sstream&gt;
std::vector&lt;std::string&gt; words( std::istream_iterator&lt;std::string&gt;{stream}, {} ); // benötigt &lt;iterator&gt;
</code></pre>
<p>Eigentlich würde ich dich loben, dass du <code>std::array</code> verwendest, aber hier ist ein dynamisches Array wohl angebrachter.</p>
<p>Wegen Zeile 20: Das kannst du verkürzen zu</p>
<pre><code>address_book.emplace_back( s_name, s_first_name, s_birthday, s_email, s_street, i_postal_code, i_house_number );
</code></pre>
<p>Und was hungarische Notationen betrifft, sprich, den Typ jeder Variable mit einem Buchstaben im Namen andeuten: Schau <a href="http://www.c-plusplus.net/forum/p1773551#1773551" rel="nofollow">hier</a>.</p>
<p>Man könnte stilistisch noch sicher deutlich mehr verbessern, aber was deinen Fehler anbelangt:</p>
<p>1. Beachte dass, wenn du formattierte Extraktoren (also beispielsweise <code>&gt;&gt;</code> s die Zahlen einlesen) mit ungültigen Eingaben fütterst, das ganze in einer Endlosschleife endet.</p>
<p>2. Beachte auch, dass, wenn du für eine der Eingaben in Zeile 13-19 mehr als ein Wort eingibst, diese überschüssigen Wörter vom nächsten <code>&gt;&gt;</code> aufgefressen werden (und es ggf. böse enden kann, siehe 1.).</p>
<p>3. Aber vor allem <strong>beachte dass <code>cin &gt;&gt; s_email</code> (Z. 19) nicht das Newline hinter dem Wort löscht!</strong> Das musst du selbst machen, damit <code>getline</code> dahinter sich nicht verfängt:</p>
<pre><code>// ...
std::cout&lt;&lt;&quot;email:&quot;;       std::cin&gt;&gt;s_email;
std::cin.ignore( std::numeric_limits&lt;std::streamsize&gt;::max(), '\n' );
</code></pre>
<p>Liest du einen <code>std::string</code> mit <code>&gt;&gt;</code> ein, werden zuerst alle Whitespaces übersprungen - dann wird ein Wort eingelesen:<br />
Sobald nach dem ersten nicht-Whitespace Zeichen wieder ein Whitespace gefunden wird, wie ein Newline, wird die Extraktion als Erfolgreich beendet, aber das Whitespace bleibt im Stream stecken. <code>getline</code> wird dann einen leeren String in <code>s_in</code> speichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404334</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 17 Jun 2014 22:18:17 GMT</pubDate></item><item><title><![CDATA[Reply to if &amp;amp; std::cin on Tue, 17 Jun 2014 22:57:39 GMT]]></title><description><![CDATA[<p>Erst mal vielen dank,</p>
<p>ich hätte jedoch noch ein paar fragen und zwar:<br />
1. Ist es besser eine Variable str_name anstatt s_name zu nennen?<br />
2. Wie sollte ich am besten das Problem mit der Endlosschleife lösen? Einen string einlessen, prüfen ob zahl, ...?<br />
3.Da wo &quot;<a href="std::streamsize" rel="nofollow">std::streamsize</a>::max()&quot; reicht doch in dem Fall eine 1 schirbe oder ?</p>
<p>Arcoth schrieb:</p>
<blockquote>
<pre><code>std::cin.ignore( std::numeric_limits&lt;std::streamsize&gt;::max(), '\n' );
</code></pre>
</blockquote>
<p>sorry mus noch viele lernen^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404337</guid><dc:creator><![CDATA[MaCo]]></dc:creator><pubDate>Tue, 17 Jun 2014 22:57:39 GMT</pubDate></item><item><title><![CDATA[Reply to if &amp;amp; std::cin on Tue, 17 Jun 2014 23:00:38 GMT]]></title><description><![CDATA[<blockquote>
<p>1. Ist es besser eine Variable str_name anstatt s_name zu nennen?</p>
</blockquote>
<p>Nein, du sollst es einfach <code>name</code> nennen.</p>
<blockquote>
<p>2. Wie sollte ich am besten das Problem mit der Endlosschleife lösen? Einen string einlessen, prüfen ob zahl, ...?</p>
</blockquote>
<p>Nein, prüfen ob die Eingabe erfolgreich war. Wie du das hinbekommst: Schau in dein Grundlagenbuch!</p>
<blockquote>
<p>3.Da wo &quot;<a href="std::streamsize" rel="nofollow">std::streamsize</a>::max()&quot; reicht doch in dem Fall eine 1 schirbe oder ?</p>
</blockquote>
<p>Du hast wohl vergessen <code>&lt;limits&gt;</code> einzubinden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404338</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 17 Jun 2014 23:00:38 GMT</pubDate></item><item><title><![CDATA[Reply to if &amp;amp; std::cin on Tue, 17 Jun 2014 23:04:48 GMT]]></title><description><![CDATA[<blockquote>
<p>Du hast wohl vergessen <code>&lt;limits&gt;</code> einzubinden?</p>
</blockquote>
<p>Ups ja thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404340</guid><dc:creator><![CDATA[MaCo]]></dc:creator><pubDate>Tue, 17 Jun 2014 23:04:48 GMT</pubDate></item><item><title><![CDATA[Reply to if &amp;amp; std::cin on Tue, 17 Jun 2014 23:50:18 GMT]]></title><description><![CDATA[<p>Oh, Mist. Ich habe gerade einen Riesenbeitrag verfasst, mit Beispielen und alles im Details erklärt und kurz bevor ich fertig war, muss ich irgendeine komische Tastenkombination gedrückt haben und nun ist alles weg. Ich weiß, diese Meldung trägt nichts zum Thread bei, aber das ist so ärgerlich, das muss ich gerade einfach ablassen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>P.S.: Die wichtigsten Punkte:<br />
-Deine Datentypen passen nicht. Postleitzahlen und Hausnummern sind keine Zahlen. Im Prinzip ist alles String.<br />
-operator&gt;&gt; ist hier ebenfalls nicht angemessen, da fast alle (alle?) der Datenfelder auch Leerzeichen enthalten können (operator&gt;&gt; trennt bei allen Whitespaces).<br />
-Die übliche Vorgehensweise wäre, das Einlesen in eine Funktion zu packen, die einen Fehlerstatus zurück gibt. Die ruft man auf, <em>dann</em> prüft man den Fehlerstatus, <em>dann</em> (und nur bei Erfolg) speichert man das Ergebnis. Da die Daten hier alle Zeichenketten sind, wäre so eine Funktion einfach eine Verkettung vieler getlines. Und da getline selber ggf. einen Fehlerstatus im Stream setzt, muss man das nicht einmal selber machen.<br />
-Das wurde hier im Forum schon sehr oft diskutiert. Oft ist in Threads über Eingabeprobleme der Nutzer &quot;Werner Salomon&quot; aktiv. Darüber kannst du gezielt mittels der Forensuche (oder besser: Google mit &quot;site:www.c-plusplus.net&quot;) nach diesen Threads suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404342</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 17 Jun 2014 23:50:18 GMT</pubDate></item></channel></rss>