<?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[Probleme mit &amp;lt;vector&amp;gt; und while]]></title><description><![CDATA[<p>Hallo zusammen,<br />
bevor ich verrückt werde, frage ich hier mal nach, ob irgendjemand eine schlüssige Erklärung / Lösung für ein Problem hat, was mich aktuell beschäftigt. Das Problem an sich ist eigentlich recht unspektakulär. Ich möchte Chars aus einer Datei auslesen. Diese Chars werden dem Konstruktor einer Klasse übergeben und in dem erzeugten Objekt gespeichert. Um mir Arbeit zu ersparen, wollte ich einen &lt;vector&gt; zur Verwaltung der Objekte verwenden. Mein Problem ist jetzt das folgende:<br />
Da ich zu Beginn nicht weiß, wie lang die Datei ist, will ich die Abarbeitung in einer While - Schleife packen, die endet, wenn das Dateiende erreicht ist. =&gt; klappt!<br />
In jedem Durchlauf erzeuge ich 2 Objekte von meiner Klasse ClKnoten und übergebe dem Konstruktor (char literal[4]) =&gt; klappt!<br />
Ist die Schleife dann aber fertig und will ich dann die chars aus den Objekten auslesen, hat der Vector zwar die richtige Anzahl erzeugt, aber aus irgendeinem Grund die Objekte überschrieben / kopiert, was auch immer...<br />
Mache ich das Ganze nicht in einer Schleife, läufts wie geschmiert...<br />
Hier mal das Ganz in Code:</p>
<pre><code class="language-cpp">int count = 0;
vector &lt;ClKnoten&gt; variablen;
while(!feof(datei))
	{
	fscanf(datei, &quot;%s&quot;, &amp;literal1);
	fscanf(datei, &quot;%s&quot;, &amp;literal2);

	variablen[count] = new ClKnoten(literal1);
	count++;
	variablen[count] = new ClKnoten(literal2);
	count++;
	}
</code></pre>
<p>Habs auch schon mit push_back() und insert(pos, elem) des Vectors versucht, aber immer das gleiche Problem!<br />
Hat da jemand eine Erklärung für?<br />
Danke schon mal!<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/131788/probleme-mit-lt-vector-gt-und-while</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 06:39:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/131788.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Jan 2006 20:16:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit &amp;lt;vector&amp;gt; und while on Thu, 05 Jan 2006 20:16:42 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
bevor ich verrückt werde, frage ich hier mal nach, ob irgendjemand eine schlüssige Erklärung / Lösung für ein Problem hat, was mich aktuell beschäftigt. Das Problem an sich ist eigentlich recht unspektakulär. Ich möchte Chars aus einer Datei auslesen. Diese Chars werden dem Konstruktor einer Klasse übergeben und in dem erzeugten Objekt gespeichert. Um mir Arbeit zu ersparen, wollte ich einen &lt;vector&gt; zur Verwaltung der Objekte verwenden. Mein Problem ist jetzt das folgende:<br />
Da ich zu Beginn nicht weiß, wie lang die Datei ist, will ich die Abarbeitung in einer While - Schleife packen, die endet, wenn das Dateiende erreicht ist. =&gt; klappt!<br />
In jedem Durchlauf erzeuge ich 2 Objekte von meiner Klasse ClKnoten und übergebe dem Konstruktor (char literal[4]) =&gt; klappt!<br />
Ist die Schleife dann aber fertig und will ich dann die chars aus den Objekten auslesen, hat der Vector zwar die richtige Anzahl erzeugt, aber aus irgendeinem Grund die Objekte überschrieben / kopiert, was auch immer...<br />
Mache ich das Ganze nicht in einer Schleife, läufts wie geschmiert...<br />
Hier mal das Ganz in Code:</p>
<pre><code class="language-cpp">int count = 0;
vector &lt;ClKnoten&gt; variablen;
while(!feof(datei))
	{
	fscanf(datei, &quot;%s&quot;, &amp;literal1);
	fscanf(datei, &quot;%s&quot;, &amp;literal2);

	variablen[count] = new ClKnoten(literal1);
	count++;
	variablen[count] = new ClKnoten(literal2);
	count++;
	}
</code></pre>
<p>Habs auch schon mit push_back() und insert(pos, elem) des Vectors versucht, aber immer das gleiche Problem!<br />
Hat da jemand eine Erklärung für?<br />
Danke schon mal!<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/958220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958220</guid><dc:creator><![CDATA[PatrickG]]></dc:creator><pubDate>Thu, 05 Jan 2006 20:16:42 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit &amp;lt;vector&amp;gt; und while on Thu, 05 Jan 2006 20:22:07 GMT]]></title><description><![CDATA[<p>Du kannst bei einem std::vector nicht einfach neue Elemente anlegen in dem du auf einen nicht vorhandenen Index zugreifst. Neue Elemente hinten anfügen (ganz ohne count) kannst du mit der Methode push_back.</p>
<p>Warum du pro Schleifendurchlauf jeweils immer 2 Elemente ausliest hab ich auch nicht verstanden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/958223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958223</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Thu, 05 Jan 2006 20:22:07 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit &amp;lt;vector&amp;gt; und while on Thu, 05 Jan 2006 20:25:03 GMT]]></title><description><![CDATA[<p>Das compiliert ?<br />
So sollte es gehen</p>
<pre><code class="language-cpp">int count = 0;
vector &lt;ClKnoten*&gt; variablen; // vector von pointer auf knoten
while(!feof(datei))    {
    fscanf(datei, &quot;%s&quot;, &amp;literal1);
    fscanf(datei, &quot;%s&quot;, &amp;literal2);

    variablen.push_back( new ClKnoten(literal1));
    count++;
    variablen.push_back( new ClKnoten(literal2));
    count++;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/958226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958226</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Thu, 05 Jan 2006 20:25:03 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit &amp;lt;vector&amp;gt; und while on Thu, 05 Jan 2006 20:39:32 GMT]]></title><description><![CDATA[<p>SideWinder schrieb:</p>
<blockquote>
<p>Du kannst bei einem std::vector nicht einfach neue Elemente anlegen in dem du auf einen nicht vorhandenen Index zugreifst. Neue Elemente hinten anfügen (ganz ohne count) kannst du mit der Methode push_back.</p>
</blockquote>
<p>Das hatte ich ursprünglich auch versucht. Hab auch probiert, den vector auf eine feste Anzahl an ELementen zu initialisieren á la</p>
<pre><code class="language-cpp">vector&lt;ClKnoten&gt; variablen(max_anzahl);
</code></pre>
<p>Brachte aber leider auch nichts. Über das count motzt der Compiler auch nicht. Ich kann auch alle 4 ELemente (2 Durchläufe) ausgeben. Er überschreibt aber immer das jeweilige Element =&gt;<br />
noch mysteröser wird die Sache aufgrund der folgenden Ausgabe:</p>
<pre><code class="language-cpp">variablen.push_back( new ClKnoten(literal1));
variablen.push_back( new ClKnoten(literal2));
</code></pre>
<p>=&gt; wenn die Schleife 2 mal durchgelaufen ist, habe ich in variablen[0]-&gt;name das gleiche (literal1) stehen wie in variablen[2]-&gt;name. Gleiches gilt für literal2 an den Vectorposition 1 und 3.<br />
Ich habe bereits probiert, obs an den Inhalten der literale liegt, die werden aber korrekt eingelesen. und wenn ich die Ausgabe der variablen[i]-&gt;name in den Schleife mache, sind die auch korrekt =&gt; nur wenn ich da nachher drauf zugreife, finde ich nur Quatsch vor!</p>
<p>SideWinder schrieb:</p>
<blockquote>
<p>Warum du pro Schleifendurchlauf jeweils immer 2 Elemente ausliest hab ich auch nicht verstanden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Das mache ich, da ich pro Zeile in der Eingabedatei 2 Inhalte auslese. =&gt; Hab aber auch gerad zum Test mal nur ein Element ausgelesen =&gt; gleiches Problem!<br />
Ich werd wahnsinnig! <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>
]]></description><link>https://www.c-plusplus.net/forum/post/958236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958236</guid><dc:creator><![CDATA[PatrickG]]></dc:creator><pubDate>Thu, 05 Jan 2006 20:39:32 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit &amp;lt;vector&amp;gt; und while on Thu, 05 Jan 2006 21:00:18 GMT]]></title><description><![CDATA[<p>&quot;new&quot; gibt einen zeiger zurück. d.h., es müsste vector&lt;ClKnoten*&gt; sein.<br />
wenn du &quot;vector&lt;ClKnoten&gt; variablen(max_anzahl);&quot; benutzt, sind die elemente bereits angelegt, du musst nichts mehr &quot;new&quot;en.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/958245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958245</guid><dc:creator><![CDATA[new man]]></dc:creator><pubDate>Thu, 05 Jan 2006 21:00:18 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit &amp;lt;vector&amp;gt; und while on Thu, 05 Jan 2006 21:00:22 GMT]]></title><description><![CDATA[<p>Zeig mal den constructor von ClKnoten<br />
Wette du machst sowas</p>
<pre><code class="language-cpp">class ClKnoten {
public:
   ClKnoten( char * ch ) { name = ch; }
protected:
   char * name;
};
</code></pre>
<p>Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/958246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958246</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Thu, 05 Jan 2006 21:00:22 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit &amp;lt;vector&amp;gt; und while on Thu, 05 Jan 2006 21:17:11 GMT]]></title><description><![CDATA[<p>Bist nah dran. Konstruktor sieht wie folgt aus:</p>
<pre><code class="language-cpp">public:
char * name;
ClKnoten(char literal[4]){this-&gt;name = literal;}
</code></pre>
<p>Hast du einen Verdacht? Wenn ja, bitte mit Erklärung! Verstehe immer gern, was ich da falsch gemacht habe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/958262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958262</guid><dc:creator><![CDATA[PatrickG]]></dc:creator><pubDate>Thu, 05 Jan 2006 21:17:11 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit &amp;lt;vector&amp;gt; und while on Thu, 05 Jan 2006 22:44:12 GMT]]></title><description><![CDATA[<p>ein char* ist nur ein zeiger auf char. da ist nur die addresse gespeichert, nicht die information selbst. wenn du den konstruktor aufrufst, zeigt also nur die membervariable &quot;name&quot; auf wasauchimmer du gerade gelesen hast. aber wenn das weg ist, zeigt &quot;name&quot; immer noch an dieselbe addresse-nur die information ist schon längst weg. du müsstest also z.b. std::string (header: &lt;string&gt;) verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/958320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958320</guid><dc:creator><![CDATA[old man]]></dc:creator><pubDate>Thu, 05 Jan 2006 22:44:12 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit &amp;lt;vector&amp;gt; und while on Thu, 05 Jan 2006 22:49:49 GMT]]></title><description><![CDATA[<p>Verwende fstream und string</p>
]]></description><link>https://www.c-plusplus.net/forum/post/958328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958328</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Thu, 05 Jan 2006 22:49:49 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit &amp;lt;vector&amp;gt; und while on Fri, 06 Jan 2006 10:51:29 GMT]]></title><description><![CDATA[<p>Any schrieb:</p>
<blockquote>
<p>Verwende fstream und string</p>
</blockquote>
<p>Ich verwende aus dem Grund FILE, damit ich ie fscanf - Methoden verwenden kann. Eine Leseschleife für fstream war mir bei der Datenstruktur zu aufwendig. Habs jetzt aber so gemacht, dass ich im Konstruktor ne kleine Schleife gebaut hab, die mir die chars in einen String kopiert. Das funktioniert auch einwandfrei. War also das Pointer - Problem. Eigentlich offensichtlich, aber manchmal sieht man den Wald vor lauter Bäumen nicht!<br />
Danke euch!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/958559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958559</guid><dc:creator><![CDATA[PatrickG]]></dc:creator><pubDate>Fri, 06 Jan 2006 10:51:29 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit &amp;lt;vector&amp;gt; und while on Fri, 06 Jan 2006 11:03:18 GMT]]></title><description><![CDATA[<p>also ich finde &quot;fin&gt;&gt;str;&quot; wesentlich einfacher zu schreiben als &quot;fscanf(fin,&quot;%s&quot;,str);&quot; - und außerdem ist die Variante mit strings sicherer im Umgang mit dem Speicherplatz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/958568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958568</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 06 Jan 2006 11:03:18 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit &amp;lt;vector&amp;gt; und while on Fri, 06 Jan 2006 12:27:09 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>also ich finde &quot;fin&gt;&gt;str;&quot; wesentlich einfacher zu schreiben als &quot;fscanf(fin,&quot;%s&quot;,str);&quot; - und außerdem ist die Variante mit strings sicherer im Umgang mit dem Speicherplatz.</p>
</blockquote>
<p>Hmmm, hatte von der Verwendung von &gt;&gt; im Zusammenhang mit fstreams noch nicht gehört. Aber lerne immer gern dazu. Ist wahrscheinlich ne Ableitung von istream, nehm ich an. Liest das wie fscanf() immer bis zum nächsten whitespace oder muss man dann andere modifikatoren verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/958640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958640</guid><dc:creator><![CDATA[PatrickWG]]></dc:creator><pubDate>Fri, 06 Jan 2006 12:27:09 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit &amp;lt;vector&amp;gt; und while on Fri, 06 Jan 2006 13:06:35 GMT]]></title><description><![CDATA[<p>Hängt davon ab welche Flags gesetzt sind. Die default Einstellung ist jedes ' ', '\n' und '\t' zu überspringen und dann Daten zu lesen. Kann man aber mit std::noskipws abschalten.</p>
<p>Also du hast:</p>
<pre><code class="language-cpp">int a,b;
in&gt;&gt;a&gt;&gt;b;
</code></pre>
<p>Wenn dein Stream nun am Anfang &quot; 0 55 03 &quot; enthielt wird er am Ende nur noch &quot; 03 &quot; enthalten. Leerzeichen können mit std::ws übersprungen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/958697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958697</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Fri, 06 Jan 2006 13:06:35 GMT</pubDate></item></channel></rss>