<?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[Mischung von operator&amp;gt;&amp;gt; und getline. War: kahlme00s Kaperung von &amp;quot;In Rekursion Wert mitnemen&amp;quot;]]></title><description><![CDATA[<p>Hallo Leute</p>
<p>Bin Neu in der C++ welt und lerne gerade, wie man mit Strukturen arbeiten kann.<br />
Meine Aufgabe ist ein adressenvewaltungsprogramm zu schreiben und mein C++ code sieht folgendermaßen aus:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&quot;Header.h&quot;
using namespace std;
Adress *padr;
int main()
{
	int i,anzahl,auswahl;
	do{
	cout&lt;&lt;&quot;ADRESSNVERWALTUNG:\n\n&quot;;
	cout&lt;&lt;&quot;&lt;1&gt; Neue Adresse eingeben\n&quot;;
	cout&lt;&lt;&quot;&lt;2&gt; Adressen ausgeben\n&quot;;
	cout&lt;&lt;&quot;&lt;3&gt; Eine Adresse aendern\n&quot;;
	cout&lt;&lt;&quot;&lt;4&gt; Adressen sortieren\n\n&quot;;
	cout&lt;&lt;&quot;&lt;5&gt; Programm beenden\n\n&quot;;
	cout&lt;&lt;&quot;Ihre Auswahl bitte: &quot;;
	cin&gt;&gt; auswahl;
	cout&lt;&lt;endl;
	switch(auswahl)
	{
	case 1: cout&lt;&lt;&quot;Wieviel Adressen moechten eingeben: &quot;;
			cin&gt;&gt;anzahl;
			padr = new Adress[anzahl];
			eingabe(anzahl);
			break;
die Funktion eingabe sieht so aus:

void eingabe(int anzahl)
{
	int i;
	for(i=0;i&lt;anzahl;i++)
			{
				cout&lt;&lt;endl;
				cout&lt;&lt;&quot;Angaben zur &quot;&lt;&lt; i+1 &lt;&lt;&quot; Person eingeben:\n\n&quot;;
				cout&lt;&lt;&quot;Name: &quot;;
				cin.getline(padr[i].Name, 41);
				cout&lt;&lt;&quot;Vorname: &quot;;
				cin.getline(padr[i].Vorname, 41);
				cout&lt;&lt;&quot;Strasse: &quot;;
				cin.getline(padr[i].Strasse, 41);
				cout&lt;&lt;&quot;PLZ: &quot;;
				cin.getline(padr[i].PLZ, 41);
				cout&lt;&lt;&quot;Ort: &quot;;
				cin.getline(padr[i].Ort, 41);
				cout&lt;&lt;&quot;Telefon: &quot;;
				cin.getline(padr[i].Tel, 41);
				cout&lt;&lt;endl&lt;&lt;endl;
			}
}
</code></pre>
<p>Das Program ist vom compiler her fehlerfrei. Nun beim eingabe der ersten adresse<br />
erscheint immer Name: Vorname:<br />
also immer die eingabe für Name wird übersprungen und ich weiss nicht warum. ab der zweiten adresse ist alles in Ordung.</p>
<p>wäre für jede erklärung sehr dankbar</p>
<p>gruß kahlme00</p>
<p>^edit durch SeppJ: cpp-Tags eingefügt^</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/303482/mischung-von-operator-gt-gt-und-getline-war-kahlme00s-kaperung-von-quot-in-rekursion-wert-mitnemen-quot</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 02:54:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/303482.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 May 2012 09:38:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mischung von operator&amp;gt;&amp;gt; und getline. War: kahlme00s Kaperung von &amp;quot;In Rekursion Wert mitnemen&amp;quot; on Tue, 15 May 2012 09:56:01 GMT]]></title><description><![CDATA[<p>Hallo Leute</p>
<p>Bin Neu in der C++ welt und lerne gerade, wie man mit Strukturen arbeiten kann.<br />
Meine Aufgabe ist ein adressenvewaltungsprogramm zu schreiben und mein C++ code sieht folgendermaßen aus:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&quot;Header.h&quot;
using namespace std;
Adress *padr;
int main()
{
	int i,anzahl,auswahl;
	do{
	cout&lt;&lt;&quot;ADRESSNVERWALTUNG:\n\n&quot;;
	cout&lt;&lt;&quot;&lt;1&gt; Neue Adresse eingeben\n&quot;;
	cout&lt;&lt;&quot;&lt;2&gt; Adressen ausgeben\n&quot;;
	cout&lt;&lt;&quot;&lt;3&gt; Eine Adresse aendern\n&quot;;
	cout&lt;&lt;&quot;&lt;4&gt; Adressen sortieren\n\n&quot;;
	cout&lt;&lt;&quot;&lt;5&gt; Programm beenden\n\n&quot;;
	cout&lt;&lt;&quot;Ihre Auswahl bitte: &quot;;
	cin&gt;&gt; auswahl;
	cout&lt;&lt;endl;
	switch(auswahl)
	{
	case 1: cout&lt;&lt;&quot;Wieviel Adressen moechten eingeben: &quot;;
			cin&gt;&gt;anzahl;
			padr = new Adress[anzahl];
			eingabe(anzahl);
			break;
die Funktion eingabe sieht so aus:

void eingabe(int anzahl)
{
	int i;
	for(i=0;i&lt;anzahl;i++)
			{
				cout&lt;&lt;endl;
				cout&lt;&lt;&quot;Angaben zur &quot;&lt;&lt; i+1 &lt;&lt;&quot; Person eingeben:\n\n&quot;;
				cout&lt;&lt;&quot;Name: &quot;;
				cin.getline(padr[i].Name, 41);
				cout&lt;&lt;&quot;Vorname: &quot;;
				cin.getline(padr[i].Vorname, 41);
				cout&lt;&lt;&quot;Strasse: &quot;;
				cin.getline(padr[i].Strasse, 41);
				cout&lt;&lt;&quot;PLZ: &quot;;
				cin.getline(padr[i].PLZ, 41);
				cout&lt;&lt;&quot;Ort: &quot;;
				cin.getline(padr[i].Ort, 41);
				cout&lt;&lt;&quot;Telefon: &quot;;
				cin.getline(padr[i].Tel, 41);
				cout&lt;&lt;endl&lt;&lt;endl;
			}
}
</code></pre>
<p>Das Program ist vom compiler her fehlerfrei. Nun beim eingabe der ersten adresse<br />
erscheint immer Name: Vorname:<br />
also immer die eingabe für Name wird übersprungen und ich weiss nicht warum. ab der zweiten adresse ist alles in Ordung.</p>
<p>wäre für jede erklärung sehr dankbar</p>
<p>gruß kahlme00</p>
<p>^edit durch SeppJ: cpp-Tags eingefügt^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211692</guid><dc:creator><![CDATA[kahlme00]]></dc:creator><pubDate>Tue, 15 May 2012 09:56:01 GMT</pubDate></item><item><title><![CDATA[Reply to Mischung von operator&amp;gt;&amp;gt; und getline. War: kahlme00s Kaperung von &amp;quot;In Rekursion Wert mitnemen&amp;quot; on Tue, 15 May 2012 09:54:04 GMT]]></title><description><![CDATA[<p>Bitte einen passenden Thread mit passender Überschrift aufmachen, keine alten Threads, noch dazu mit völlig unpassendem Thema, kapern. cpp-Tags benutzen (links unter den Smileys), um Code zu formatieren. Ich mache das ausnahmsweise mal für dich, beim nächsten mal bitte selber richtig machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211699</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 15 May 2012 09:54:04 GMT</pubDate></item><item><title><![CDATA[Reply to Mischung von operator&amp;gt;&amp;gt; und getline. War: kahlme00s Kaperung von &amp;quot;In Rekursion Wert mitnemen&amp;quot; on Tue, 15 May 2012 10:16:40 GMT]]></title><description><![CDATA[<p>Benutze keine globalen Variablen, benutze niemals new[], std::vector ist immer die viel bessere Alternative. Benutze nicht ohne Not char-Arrays, std::string ist fast immer die bessere Alternative (hier sogar ganz eindeutig). Benutze nicht endl, wenn du '\n' meinst. <a href="http://www.cplusplus.com/reference/iostream/manipulators/endl/" rel="nofollow">endl</a> ist nämlich '\n' und <a href="http://www.cplusplus.com/reference/iostream/ostream/flush/" rel="nofollow">flush()</a>, das möchtest du meistens nicht, außer vielleicht unmittelbar vor einer Eingabe oder am Ende einer längeren Ausgabe. Definiere Variablen so lokal wie möglich (siehe auch globale variablen oben), anstatt am Funktionsanfang. Insbesondere bei Zählvariablen in einer for-Schleife hast du ausdrücklich die Chance <code>for(int i = ...</code> zu benutzen.</p>
<p>Dies alles sind mittelschwere bis schwere Designmängel die man auch als Anfänger nicht machen sollte und sich keinesfalls angewöhnen sollte. Meine Vermutung: Ganz schlechter Lehrer. Falls du das aus einem Buch oder Tutorial hast: Welches? Siehe meine Signatur für gute Buchtipps.</p>
<p>Dein Design könnte insgesamt verbessert werden, wenn deine Adressklasse besser gestaltet wäre, insbesondere mit einem eigenen Leseoperator, aber das ist vermutlich noch zu schwer für dich, deswegen habe ich es oben nicht aufgeführt, denn das lernst du ja anscheinend gerade.</p>
<p>Dein Fehler geht schon aus der Überschrift hervor, den ich für deinen Thread gewählt habe:<br />
Denk dir die Streams von C++ (cin und cout sind z.B. Instanzen eines istream bzw. eines ostream) als eine lange Reihe von Zeichen. An dieser Reihe kann man entlangfahren mit den Eingabe- bzw. Ausgabeoperationen. Denk dir <code>cin &gt;&gt; zahl;</code> nicht als &quot;Befehl, der eine Zahl von der Tastatur liest&quot;, sondern als eine Aktion die auf der langen Reihe von Zeichen operiert die irgendwie in dein Programm eingegeben wird.<br />
Wenn du mit dem Operator&gt;&gt; etwas einliest, dann wird normalerweise führender Whitespace übersprungen und danach bis zum nächsten Whitespace gelesen, oftmals ist dies der Zeilenumbruch '\n' mit dem ein Anwender seine Eingaben abschließt. Der Zeilenumbruch wird dabei nicht mitgelesen!. getline hingegen liest bis inklusive dem nächsten Zeilenumbruch. Wenn ein getline direkt auf eine Leseaktion mit operator&gt;&gt; folgt, dann wird daher einfach nur der Zeilenumbruch gelesen, der noch im Eingabestrom verblieben ist und die Rückgabe von getline ist eine Leerzeile.</p>
<p>Abhilfe ist, entweder mit der Mischung von formatierten Leseaktionen(z.B. operator &gt;&gt;) und unformatierten Leseaktionen (z.B getline) zurückhaltender zu sein. Wenn du sie doch mischt, dann solltest du vorher prüfen, ob vor dem getline vielleicht noch Whitespace im Eingabestrom sitzt, den du nicht möchtest und dies gegebenenfalls mit ignore überspringen. Guck dir mal die ganzen verschiedenen Aktionen an, die man auf Eingabeströmen machen kann:<br />
<a href="http://www.cplusplus.com/reference/iostream/istream/" rel="nofollow">http://www.cplusplus.com/reference/iostream/istream/</a><br />
Da fällt dir bestimmt was passendes ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211711</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 15 May 2012 10:16:40 GMT</pubDate></item><item><title><![CDATA[Reply to Mischung von operator&amp;gt;&amp;gt; und getline. War: kahlme00s Kaperung von &amp;quot;In Rekursion Wert mitnemen&amp;quot; on Wed, 16 May 2012 18:36:00 GMT]]></title><description><![CDATA[<p>Hallo SeppJ</p>
<p>Danke für die Aufmachung eines neuen Threads und die Formatierung. wusste nicht, wie man das macht. jetzt weiss ich. Danke auch für die kosbaren Tipps.</p>
<p>Ueber die Mischung von Operrator &gt;&gt; und getline habe ich in der Seite, die du mir empholen hast nachgeschaut und habe mich entschieden fuer cin.ignore() entschieden.<br />
Meine Frage ist:<br />
sollte ich, wenn ich cin.getline() anwende, immer auf cin&gt;&gt; verzichten. Z.B wenn ich einen Integer Wert einlesen will, also als char deklarieren und als char einlesen und danach mit der Funktion atoi() umwandeln?.</p>
<p>Übrigens ich kann momentan nur mit new[] arbeiten, wenn ich Speicher dynamisch reservieren will. habe keine Ahnung von std::vector und std::strings oder wurde in meinem Buch bis jetzt nicht erwähnt. alles andere habe ich geändert, so wie du gesagt hast.</p>
<p>Mein Buch heisst C++ für IT-Berufe von Dirk Hardy: <a href="https://duckduckgo.com/?q=isbn+9783808585498&amp;cppnetbooks" rel="nofollow">C++ für IT-Berufe | ISBN: 9783808585498</a>.<br />
Danke im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212374</guid><dc:creator><![CDATA[kahlme00]]></dc:creator><pubDate>Wed, 16 May 2012 18:36:00 GMT</pubDate></item><item><title><![CDATA[Reply to Mischung von operator&amp;gt;&amp;gt; und getline. War: kahlme00s Kaperung von &amp;quot;In Rekursion Wert mitnemen&amp;quot; on Wed, 16 May 2012 19:18:53 GMT]]></title><description><![CDATA[<p>kahlme00 schrieb:</p>
<blockquote>
<p>sollte ich, wenn ich cin.getline() anwende, immer auf cin&gt;&gt; verzichten. Z.B wenn ich einen Integer Wert einlesen will, also als char deklarieren und als char einlesen und danach mit der Funktion atoi() umwandeln?.</p>
</blockquote>
<p>Nein, nicht verzichten. Das Problem löst sich mehr oder weniger alleine, wenn du später für deine Klassen brauchbare Ein- und Ausgabeoperatoren selber schreibst. Ich fürchte jedoch, das wird in deinem Lehrbuch nie kommen, da es schlecht ist. Deine Kenntnis von atoi aber Unkenntnis von Stringstreams deutet darauf hin.</p>
<blockquote>
<p>Übrigens ich kann momentan nur mit new[] arbeiten, wenn ich Speicher dynamisch reservieren will. habe keine Ahnung von std::vector und std::strings oder wurde in meinem Buch bis jetzt nicht erwähnt.</p>
</blockquote>
<p>Ein ganz schlimmes Alarmsignal. Wegwerfen. Oder der Jahreszeit gemäß als Grillanzünder benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212397</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 16 May 2012 19:18:53 GMT</pubDate></item><item><title><![CDATA[Reply to Mischung von operator&amp;gt;&amp;gt; und getline. War: kahlme00s Kaperung von &amp;quot;In Rekursion Wert mitnemen&amp;quot; on Mon, 28 May 2012 18:20:50 GMT]]></title><description><![CDATA[<p>Werde ich machen aber erst im Juli <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>Nun habe ich folgendes Problem, ich moechte die Adressen Nach Namen aussortieren, dazu soll ich den bubblesort algorithmus anwenden. Habe das gemacht aber gefällt mir nicht die Art, wie ich das gelöst habe, da ich eine Hilfsfunktion namens</p>
<pre><code class="language-cpp">void tausche(Adress *A, Adress *B)
</code></pre>
<p>anwenden soll. Leider weiss ich nicht wie.<br />
Meine Lösung sieht so aus:</p>
<pre><code class="language-cpp">void bubblesort(Adress *S, int anzahl)
{
	Adress help;
	for(int i=anzahl-2;i&gt;=0;i--)
		for(int j=0;j&lt;=i;j++)
		{
			if(S[j].Name[0] &gt; S[j+1].Name[0])
			//if(strcmp(S[j].Name, S[j+1].Name)&gt;0)
			{
				//struct Adress help = S[j];
				help = S[j];
				S[j] = S[j+1];
				S[j+1] = help;
			}
		}
}
</code></pre>
<p>Wäre für jeden Hinweis sehr dankbar.<br />
Übrings das Speicherreservierung mit &lt;vector&gt; klappt wunderbar. Leider kämpfe ich immer noch mit &lt;strings&gt;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2216450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2216450</guid><dc:creator><![CDATA[kahlme00]]></dc:creator><pubDate>Mon, 28 May 2012 18:20:50 GMT</pubDate></item><item><title><![CDATA[Reply to Mischung von operator&amp;gt;&amp;gt; und getline. War: kahlme00s Kaperung von &amp;quot;In Rekursion Wert mitnemen&amp;quot; on Mon, 28 May 2012 18:30:16 GMT]]></title><description><![CDATA[<p>Deine Zeilen 11-13 sind höchstwahrscheinlich das ,was auch in der tausche-Funktion steht. Einfach ersetzen.</p>
<p>Und dein Lehrbuch zeigt einmal mehr seine Schwächen. Hier Pointer zu benutzen macht überhaupt keinen Sinn, Referenzen wären angesagt. Und natürlich der ganze andere Mist, wie dass hier mit rohen Arrays hantiert wird und dass man die Standardbibliothek schlecht nachprogrammiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2216452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2216452</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 28 May 2012 18:30:16 GMT</pubDate></item></channel></rss>