<?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[Array mithilfe von getline() füllen]]></title><description><![CDATA[<p>Was ich mit meinem Code bezwecken möchte, ist ganz einfach die Datei einlesen und jede Zeile aus dieser Datei in ein Array speichern. (Die Datei wird vorher ordnungsgemäß geöffnet.) Zur Überprüfung möchte ich mir danach ein zufälliges Array anzeigen lassen, denn ich möchte später mit ganz bestimmten Arrays bzw. ihrem Inhalt weiterarbeiten und ausgeben lassen. und genau an dieser Stelle scheitert mein Code. Wenn ich mir die Arrays innerhalb der for-Schleife ausgeben lasse, funktioniert's prima, aber sobald ich das - wie unten gezeigt - außerhalb dieser Schleife tue, werden in allen Arrays komischerweise der Inhalt der letzten Zeile gespeichert.</p>
<pre><code class="language-cpp">for (int j=0; j&lt;45; j++)	//Loop erzeugen, der alle Zeilen in der Datei durchgeht
{
     quesFile.getline(frage,sizeof(frage));
     alle[j] = frage;
}
cout &lt;&lt; &quot;Hier ist Array nr. 5: &quot; &lt;&lt; alle[5] &lt;&lt; endl;
</code></pre>
<p>Also wenn jemand mir sagen könnte, woran's liegt oder eine alternative Lösung hätte, wäre ich sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245129/array-mithilfe-von-getline-füllen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 19:29:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245129.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Jul 2009 22:20:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array mithilfe von getline() füllen on Fri, 10 Jul 2009 01:32:02 GMT]]></title><description><![CDATA[<p>Was ich mit meinem Code bezwecken möchte, ist ganz einfach die Datei einlesen und jede Zeile aus dieser Datei in ein Array speichern. (Die Datei wird vorher ordnungsgemäß geöffnet.) Zur Überprüfung möchte ich mir danach ein zufälliges Array anzeigen lassen, denn ich möchte später mit ganz bestimmten Arrays bzw. ihrem Inhalt weiterarbeiten und ausgeben lassen. und genau an dieser Stelle scheitert mein Code. Wenn ich mir die Arrays innerhalb der for-Schleife ausgeben lasse, funktioniert's prima, aber sobald ich das - wie unten gezeigt - außerhalb dieser Schleife tue, werden in allen Arrays komischerweise der Inhalt der letzten Zeile gespeichert.</p>
<pre><code class="language-cpp">for (int j=0; j&lt;45; j++)	//Loop erzeugen, der alle Zeilen in der Datei durchgeht
{
     quesFile.getline(frage,sizeof(frage));
     alle[j] = frage;
}
cout &lt;&lt; &quot;Hier ist Array nr. 5: &quot; &lt;&lt; alle[5] &lt;&lt; endl;
</code></pre>
<p>Also wenn jemand mir sagen könnte, woran's liegt oder eine alternative Lösung hätte, wäre ich sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740087</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Fri, 10 Jul 2009 01:32:02 GMT</pubDate></item><item><title><![CDATA[Reply to Array mithilfe von getline() füllen on Fri, 10 Jul 2009 04:45:33 GMT]]></title><description><![CDATA[<p>Zeig mal etwas mehr Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740134</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Fri, 10 Jul 2009 04:45:33 GMT</pubDate></item><item><title><![CDATA[Reply to Array mithilfe von getline() füllen on Fri, 10 Jul 2009 04:56:28 GMT]]></title><description><![CDATA[<p>Ich rate mal:</p>
<ol>
<li>frage ist ein char-array</li>
<li>alle ist ein array von char-Pointern (also char* alle[])</li>
</ol>
<p>Dann sorgst du mit deiner Zuweisung in der Schleife dafür, dass jeder Eintrag von &quot;alle&quot; auf den C-String in frage zeigt - und damit egal was du asugibst immer die selbe ausgabe ist (weil ja alle auf den selben C-String zeigen).</p>
<p>Tip: benute für frage einen std::string, dann gibts keine Größenbeschränkung beim getline(), und benutze für alle einen Container von strings statt eines normalen Arrays, dann gibts keine vorgegebene Größe für die Datei und dein Problem verschwindet auch gleich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740137</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 10 Jul 2009 04:56:28 GMT</pubDate></item><item><title><![CDATA[Reply to Array mithilfe von getline() füllen on Fri, 10 Jul 2009 12:10:44 GMT]]></title><description><![CDATA[<p>Danke, pumuckl, ich habe jetzt ziemlich lange im Internet nach einer Alternative mit Strings bzw. vector recherchiert und hab versucht, den Prozess des Herauslesens so kurz wie möglich zu machen, aber es funktioniert einfach nicht, weil ich ne runtime error bekomme (string subscript out of range).</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdio&gt;
using namespace std;

int main()
{
	fstream quesFile;
	quesFile.open(&quot;E:\\C++\\Microsoft Visual Studio 9.0\\MyProjects\\Quizzle\\Quizzle\\fragen.txt&quot;, ios::in);
	vector&lt;string&gt; line;
	string inhalt;
	quesFile.seekg (0, ios::beg);
    do
    {
		getline(quesFile,inhalt);
		line.push_back(inhalt);
    }
	while (!quesFile.eof());
	cout &lt;&lt; &quot;5. Array: &quot; &lt;&lt; inhalt[4] &lt;&lt; endl;
	cin.get();
	quesFile.close();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1740370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740370</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Fri, 10 Jul 2009 12:10:44 GMT</pubDate></item><item><title><![CDATA[Reply to Array mithilfe von getline() füllen on Fri, 10 Jul 2009 12:15:46 GMT]]></title><description><![CDATA[<p>Du machst einmal zu oft push_back(). Denn eof wird erst beim nächsten Leseversuch <strong>nach</strong> Erreichen des Dateiendes gesetzt.</p>
<p>Und überprüf erst mal, ob die Größe deines Vektors mindestns 5 ist, bevor du auf das fünfte Element zugreifst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740374</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 10 Jul 2009 12:15:46 GMT</pubDate></item><item><title><![CDATA[Reply to Array mithilfe von getline() füllen on Fri, 10 Jul 2009 12:34:43 GMT]]></title><description><![CDATA[<p>Ich weiss Eure Hilfe wirklich zu schätzen aber könnte jemand mir bitte sagen, nicht nur was ich falsch mache, sondern auch wie man's richtig macht? um das Problem mit der Länge des Vektors zu umgehen, habe ich die for-Schleife eingebaut. Wenn ich das richtig verstanden habe, Michael, dann kommt das pushback nach do-while? würde also so aussehen:</p>
<pre><code class="language-cpp">[...]
	quesFile.seekg (0, ios::beg);
    do
    {
		getline(quesFile,inhalt);
    }
	while (!quesFile.eof());
	line.push_back(inhalt);
	for (unsigned int i = 0; i &lt; inhalt.size(); i++) cout &lt;&lt; &quot;5. Array: &quot; &lt;&lt; inhalt[i] &lt;&lt; endl;
	cin.get();
[...]
</code></pre>
<p>und folgenden Output produzieren, was eigentlich nur die Zeichen in der letzten Zeile sind:</p>
<pre><code>5. Array: 2
5. Array: 0
5. Array:
5. Array: -
5. Array: -
5. Array: -
5. Array: i
5. Array: n
5. Array: h
5. Array: a
5. Array: l
5. Array: t
5. Array: -
5. Array: -
5. Array: -
</code></pre>
<p>Da kommt zwar keine fehlermeldung, aber das ist nicht das, was ich haben möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740387</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Fri, 10 Jul 2009 12:34:43 GMT</pubDate></item><item><title><![CDATA[Reply to Array mithilfe von getline() füllen on Fri, 10 Jul 2009 13:00:04 GMT]]></title><description><![CDATA[<p>Nein, so verwirfst du ja alle Zeilen und nur für die letzte rufst du push_back auf.</p>
<p>Eher so:</p>
<pre><code class="language-cpp">fstream quesFile(&quot;E:\\C++\\Microsoft Visual Studio 9.0\\MyProjects\\Quizzle\\Quizzle\\fragen.txt&quot;, ios::in);  // spar dir den Aufruf von open()
    vector&lt;string&gt; line;
    string inhalt;
    // quesFile.seekg (0, ios::beg);  überflüssig
    while(getline(quesFile, inhalt))
        line.push_back(inhalt);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1740399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740399</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 10 Jul 2009 13:00:04 GMT</pubDate></item><item><title><![CDATA[Reply to Array mithilfe von getline() füllen on Fri, 10 Jul 2009 13:00:06 GMT]]></title><description><![CDATA[<p>[Rewind] schrieb:</p>
<blockquote>
<p>Wenn ich das richtig verstanden habe, Michael, dann kommt das pushback nach do-while?</p>
</blockquote>
<p>Nein, das hast du falsch verstanden. Das push_back muss schon in die Schleife, aber eben nur wenn der vorangegangene Leseversuch erfolgreich war. ich würds so machen:</p>
<pre><code class="language-cpp">vector&lt;string&gt; fileContent; //
  string line;
  ifstream questionFile(&quot;E:\\C++\\Microsoft Visual Studio 9.0\\MyProjects\\Quizzle\\Quizzle\\fragen.txt&quot;);  

  getline(questionFile, line);
  while (!questionFile.eof())
  {
    fileContent.push_back(line);
    getline(questionFile, line);
  }
</code></pre>
<p>ich hab die Variablen mal etwas umbenannt, weil du 4 Unschönheiten drin hattest:<br />
- deutsche und englische Namen gemischt verwirren nur<br />
- aussagenlose Variablennamen (inhalt? wessen inhalt?) machen den Code weniger klar als er sein könnte<br />
- falsche Variablennamen (der vector enthält alle Zeilen der datei, sollte also nicht line heißen) sind irreführend und verwirren unnötig<br />
- Abkürzungen (quesFile) machen den Code nur unnötig &quot;holprig&quot; zu lesen - und den Tippaufwand nimmt dir deine IDE bei Namensvervollständigung eh ab, egal obs 8 oder 15 Zeichen sind. Niemand liest gern &quot;mkNewPtr2prvRefObj&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740400</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 10 Jul 2009 13:00:06 GMT</pubDate></item><item><title><![CDATA[Reply to Array mithilfe von getline() füllen on Fri, 10 Jul 2009 13:04:37 GMT]]></title><description><![CDATA[<p>nur aus reiner neugier:<br />
geht das nich iwie (eleganter) mit std-mitteln? ^^</p>
<p>ich hab jz aber auf die schnelle nichts hinbekommen - kanidaten wären zwar imho <code>std::istream_iterator</code> und <code>std::back_inserter</code> , aber kein Plan - ich hab nichts zu Stande bekommen : D</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740404</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 10 Jul 2009 13:04:37 GMT</pubDate></item><item><title><![CDATA[Reply to Array mithilfe von getline() füllen on Fri, 10 Jul 2009 13:18:24 GMT]]></title><description><![CDATA[<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-240556-and-postdays-is-0-and-postorder-is-asc-and-start-is-7.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-240556-and-postdays-is-0-and-postorder-is-asc-and-start-is-7.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740415</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 10 Jul 2009 13:18:24 GMT</pubDate></item><item><title><![CDATA[Reply to Array mithilfe von getline() füllen on Fri, 10 Jul 2009 13:24:27 GMT]]></title><description><![CDATA[<p>ty : &gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740420</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 10 Jul 2009 13:24:27 GMT</pubDate></item><item><title><![CDATA[Reply to Array mithilfe von getline() füllen on Mon, 13 Jul 2009 13:55:31 GMT]]></title><description><![CDATA[<p>Ok, ich habe es endlich zum Laufen gebracht und es funktioniert einwandfrei. Vielen Dank, unskilled, dein Vorschlag hat prima funktioniert. Die Variante von pumuckl spuckte bei mir nur einzelne Zeichen der letzten Zeile aus (der Fehler kann auch bei meiner Umsetzung liegen, aber ich bezweifle's). Und danke pumuckl für die Tipps. Ich werd versuchen, sie im Kopf zu behalten, wenn ich nächstes Mal um deine Hilfe bitte <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1742143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742143</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Mon, 13 Jul 2009 13:55:31 GMT</pubDate></item><item><title><![CDATA[Reply to Array mithilfe von getline() füllen on Mon, 13 Jul 2009 15:00:47 GMT]]></title><description><![CDATA[<p>[Rewind] schrieb:</p>
<blockquote>
<p>Die Variante von pumuckl spuckte bei mir nur einzelne Zeichen der letzten Zeile aus (der Fehler kann auch bei meiner Umsetzung liegen, aber ich bezweifle's).</p>
</blockquote>
<p>Ich bezweifle es meinerseits <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Du musst natürlich die Schleife mit dem output über den vector (fileContext) laufen lassen, nicht über den String (line) - im String ist nämlich am Ende tatsächlich nur die letzte Zeile enthalten, und dort mit der Schleife drüber zu laufen gibt dann tatsächlich nur einzelne Zeichen aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742190</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 13 Jul 2009 15:00:47 GMT</pubDate></item><item><title><![CDATA[Reply to Array mithilfe von getline() füllen on Mon, 13 Jul 2009 15:36:40 GMT]]></title><description><![CDATA[<p>[Rewind] schrieb:</p>
<blockquote>
<p>Vielen Dank, unskilled, dein Vorschlag hat prima funktioniert.</p>
</blockquote>
<p>Danke für die Blumen - nur hab ich in dem ganzen thread genau 2 posts geschrieben - eine frage und einmal nen danke, weil jmd anderes die forensuche richtig bedienen kann : D</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742232</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 13 Jul 2009 15:36:40 GMT</pubDate></item></channel></rss>