<?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[fstream getline - Nächste Zeile?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe probiert, den Lesezeiger um 1 zu erhöhen und dann neu zu setzen, damit in die nächste Zeile gesprungen wird.<br />
Funktioniert aber nicht.</p>
<pre><code class="language-cpp">class Field
{
	char maps[50][15][78];
public:
	Field();
	~Field();

	void drawMap();
};
</code></pre>
<pre><code class="language-cpp">Field::Field() 
{ 
    // Load maps
	// For each map
    for(short i = 0; i &lt; 2; i++) 
    { 
		stringstream curMap;
		curMap &lt;&lt; &quot;map&quot;;
		curMap.width(2); 
        curMap.fill('0');
		curMap &lt;&lt; i + 1 &lt;&lt; &quot;.txt&quot;;

		fstream mapFile(curMap.str().c_str(), ios::in | ios:: out | ios::binary);

		if(mapFile.fail())
            cout &lt;&lt; curMap.str() &lt;&lt; &quot; nicht geladen!&quot; &lt;&lt; endl; 
        else 
		{
            cout &lt;&lt; curMap.str() &lt;&lt; &quot; geladen!&quot; &lt;&lt; endl; 

			// For each row 
			for(short r = 0; r &lt; 15; r++) 
			{
				// For each element 
				for(short e = 0; e &lt; 78; e++) 
					mapFile.getline(maps[i][r], 78);
				long rpos = mapFile.tellg();
				rpos++;
				mapFile.seekp(rpos, ios::cur);
			} 
		}
    } 
} 

Field::~Field()
{
	;
}

void Field::drawMap()
{
	for(short r = 0; r &lt; 15; r++)
	{
		for(short e = 0; e &lt; 78; e++)
		{
			cout &lt;&lt; maps[0][r][e];
		}
		cout &lt;&lt; endl;
	}
}
</code></pre>
<p>Die map01.txt sieht so aus:</p>
<pre><code>GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSS
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSSSSSSSS
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSSSSSSSS
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSSSSSSSS
GGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
GGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
WWWWWWWWWWWWWWWWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSSSSSSSSSSS
WWWWWWWWWWWWWWWWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSSSSSSSSSSS
WWWWWWWWWWWWWWWWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
GGGWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
GGGWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
GGGWWWWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
GGGWWWWWWWWWWWWWWWWWWWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
GGGWWWWWWWWWWWWWWWWWWWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
GGGWWWWWWWWWWWWWWWWWWWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
</code></pre>
<p>Ausgegeben wird jedoch nur die 1. Zeile, der Rest sind irgendwelche Zeichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/148543/fstream-getline-nächste-zeile</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 21:48:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/148543.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 27 May 2006 20:33:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to fstream getline - Nächste Zeile? on Sat, 27 May 2006 20:33:13 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe probiert, den Lesezeiger um 1 zu erhöhen und dann neu zu setzen, damit in die nächste Zeile gesprungen wird.<br />
Funktioniert aber nicht.</p>
<pre><code class="language-cpp">class Field
{
	char maps[50][15][78];
public:
	Field();
	~Field();

	void drawMap();
};
</code></pre>
<pre><code class="language-cpp">Field::Field() 
{ 
    // Load maps
	// For each map
    for(short i = 0; i &lt; 2; i++) 
    { 
		stringstream curMap;
		curMap &lt;&lt; &quot;map&quot;;
		curMap.width(2); 
        curMap.fill('0');
		curMap &lt;&lt; i + 1 &lt;&lt; &quot;.txt&quot;;

		fstream mapFile(curMap.str().c_str(), ios::in | ios:: out | ios::binary);

		if(mapFile.fail())
            cout &lt;&lt; curMap.str() &lt;&lt; &quot; nicht geladen!&quot; &lt;&lt; endl; 
        else 
		{
            cout &lt;&lt; curMap.str() &lt;&lt; &quot; geladen!&quot; &lt;&lt; endl; 

			// For each row 
			for(short r = 0; r &lt; 15; r++) 
			{
				// For each element 
				for(short e = 0; e &lt; 78; e++) 
					mapFile.getline(maps[i][r], 78);
				long rpos = mapFile.tellg();
				rpos++;
				mapFile.seekp(rpos, ios::cur);
			} 
		}
    } 
} 

Field::~Field()
{
	;
}

void Field::drawMap()
{
	for(short r = 0; r &lt; 15; r++)
	{
		for(short e = 0; e &lt; 78; e++)
		{
			cout &lt;&lt; maps[0][r][e];
		}
		cout &lt;&lt; endl;
	}
}
</code></pre>
<p>Die map01.txt sieht so aus:</p>
<pre><code>GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSS
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSSSSSSSS
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSSSSSSSS
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSSSSSSSS
GGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
GGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
WWWWWWWWWWWWWWWWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSSSSSSSSSSS
WWWWWWWWWWWWWWWWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSSSSSSSSSSS
WWWWWWWWWWWWWWWWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
GGGWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
GGGWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
GGGWWWWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
GGGWWWWWWWWWWWWWWWWWWWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
GGGWWWWWWWWWWWWWWWWWWWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
GGGWWWWWWWWWWWWWWWWWWWWWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
</code></pre>
<p>Ausgegeben wird jedoch nur die 1. Zeile, der Rest sind irgendwelche Zeichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1066393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1066393</guid><dc:creator><![CDATA[Meierei]]></dc:creator><pubDate>Sat, 27 May 2006 20:33:13 GMT</pubDate></item><item><title><![CDATA[Reply to fstream getline - Nächste Zeile? on Sat, 27 May 2006 21:02:15 GMT]]></title><description><![CDATA[<p>der lesezeiger zeigt auf das aktuelle ZEICHEN nicht auf die ZEILE.<br />
das heist dü müsstest entweder alles zeichenweise einlesen oder den zeiger immer um sizeof(zeile) erhöhen</p>
<p>Mfg Shade37337</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1066409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1066409</guid><dc:creator><![CDATA[branleb]]></dc:creator><pubDate>Sat, 27 May 2006 21:02:15 GMT</pubDate></item><item><title><![CDATA[Reply to fstream getline - Nächste Zeile? on Sat, 27 May 2006 23:25:09 GMT]]></title><description><![CDATA[<p>Aber der Zeiger zeigt nach getline doch auf das letzte Element, und mit rpos++ dann auf das erste der nächsten Zeile??</p>
<p>Und warum funktioniert</p>
<pre><code class="language-cpp">// For each element 
				for(short e = 0; e &lt; 78; e++) 
					mapFile.getline(maps[i][r], 78);
				long rpos = mapFile.tellg();
				rpos += 79;
				mapFile.seekp(rpos, ios::cur);
</code></pre>
<p>nicht? Es wird immer nur die 1. Zeile angezeigt.</p>
<p><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>
]]></description><link>https://www.c-plusplus.net/forum/post/1066444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1066444</guid><dc:creator><![CDATA[Meierei]]></dc:creator><pubDate>Sat, 27 May 2006 23:25:09 GMT</pubDate></item><item><title><![CDATA[Reply to fstream getline - Nächste Zeile? on Sun, 28 May 2006 05:26:06 GMT]]></title><description><![CDATA[<p>Meierei schrieb:</p>
<blockquote>
<p>Und warum funktioniert [...] nicht? Es wird immer nur die 1. Zeile angezeigt.</p>
</blockquote>
<p>Weil du immer in dieselbe Stelle deines Arrays einliest. In dieser Schleife ändern sich weder i noch r. Vermutlich soll da statt i e stehen. Dann läuft die Schleife aber zu weit, e darf höchstens 49 werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1066460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1066460</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Sun, 28 May 2006 05:26:06 GMT</pubDate></item><item><title><![CDATA[Reply to fstream getline - Nächste Zeile? on Sun, 28 May 2006 08:59:36 GMT]]></title><description><![CDATA[<p>Meierei schrieb:</p>
<blockquote>
<p>Aber der Zeiger zeigt nach getline doch auf das letzte Element, und mit rpos++ dann auf das erste der nächsten Zeile??</p>
</blockquote>
<p>Nein, der zeigt nach jedem getline auf den Anfang der Folgezeile.</p>
<p>@shade:<br />
Sei mir nicht böse aber halte dich doch ein bisschen mit Deinem Halbwissen zurück. sizeof(zeile) bringt je nach Typ von zeile (String oder Char-Array) wenig bis garnichts, weil es entweder die Länge des gesamten Fassungsvermögens des char-Arrays oder die Größe der Verwaltungsdaten der string-Klasse zurückgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1066486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1066486</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sun, 28 May 2006 08:59:36 GMT</pubDate></item><item><title><![CDATA[Reply to fstream getline - Nächste Zeile? on Sun, 28 May 2006 13:08:52 GMT]]></title><description><![CDATA[<p>sizeof(zeile)<br />
wa rals pseudocode gemeint den er was ersetzten muss</p>
<p>MfgShade37337</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1066641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1066641</guid><dc:creator><![CDATA[branleb]]></dc:creator><pubDate>Sun, 28 May 2006 13:08:52 GMT</pubDate></item><item><title><![CDATA[Reply to fstream getline - Nächste Zeile? on Sun, 28 May 2006 13:56:24 GMT]]></title><description><![CDATA[<p>Meierei schrieb:</p>
<blockquote>
<p>Aber der Zeiger zeigt nach getline doch auf das letzte Element, und mit rpos++ dann auf das erste der nächsten Zeile??</p>
<p>Und warum funktioniert</p>
<pre><code class="language-cpp">// For each element 
				for(short e = 0; e &lt; 78; e++) 
					mapFile.getline(maps[i][r], 78);
				long rpos = mapFile.tellg();
				rpos += 79;
				mapFile.seekp(rpos, ios::cur);
</code></pre>
<p>nicht? Es wird immer nur die 1. Zeile angezeigt.</p>
<p><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>Überlege dochmal was du da machst! map[i][r] ist ein array aus 78 elementen. Und was macht die getline-Funktion? Schau es dir genau an: <a href="http://cppreference.com/cppio/getline.html" rel="nofollow">http://cppreference.com/cppio/getline.html</a><br />
Sie liest mehrere Zeichen! Also brauchst du sie nicht 78 mal aufzurufen. Einmal reicht. Außerdem musst du bedenken, dass sie bis num - 1 einliest, also musst du 79 als dritten Parameter benutzen.</p>
<p>Nun musst du noch etwas wissen: Wenn die maximale Anzahl, also 78, erreicht wurde, bevor ein Zeilenumbruch erreicht wurde, wir der Status des Stream auf einen Fehlschlag gesetzt. Dies musst du abfangen und verarbeiten. Außerdem musst du den Zeilenumbruch, so wie du dir es auch gedacht hast, überspringen, nur: Manchmal ist der Zeilenumbruch 2 Zeihen lang! Dann besteht er aus \r\n. Deswegen solltest du ihn lieber so überspringen:</p>
<pre><code class="language-cpp">mapFile.ignore(2, '\n');
</code></pre>
<p>Noch ein paar Sachen: Neben fail() musst du auch noch auf eof() prüfen, da dies auch einen fail() auslösen kann. Ganz sicher bin ich mir da nicht...<br />
Außerdem würde ich kein ios::binary benutzen bei einer Textdatei. Dort hat getline Nebenwirkungen die ich noch nicht verstanden habe, also einfach weglassen.</p>
<p>Ich hoffe mal ich hab nichts falsches erzählt, aber so könnte es dann aussehen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;fstream&gt;
using namespace std;

class Field {
    public:
        Field();
        void drawMap();
    private:
        char maps[50][15][78];
};

Field::Field() {
    // Load maps
    // For each map
    for(int i = 0; i &lt; 2; ++i) {
        stringstream curMap;
        curMap &lt;&lt; &quot;map&quot;;
        curMap.width(2);
        curMap.fill('0');
        curMap &lt;&lt; i + 1 &lt;&lt; &quot;.txt&quot;;

        ifstream mapFile(curMap.str().c_str());

        if(mapFile.fail()) {
            cout &lt;&lt; curMap.str() &lt;&lt; &quot; nicht geladen!&quot; &lt;&lt; endl;
        } else {
            cout &lt;&lt; curMap.str() &lt;&lt; &quot; geladen!&quot; &lt;&lt; endl;

            for(int r = 0; r &lt; 15; ++r) {
                mapFile.getline(maps[i][r], 79);
                if(mapFile.fail() &amp;&amp; !mapFile.eof()) {
                    mapFile.clear();
                    mapFile.ignore(2, '\n');
                }
            }
        }
    }
}

void Field::drawMap() {
    for(int r = 0; r &lt; 15; r++) {
        for(int e = 0; e &lt; 78; e++) {
            cout &lt;&lt; maps[0][r][e];
        }
        cout &lt;&lt; endl;
    }
}

int main() {
    Field m;
    m.drawMap();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1066675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1066675</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sun, 28 May 2006 13:56:24 GMT</pubDate></item><item><title><![CDATA[Reply to fstream getline - Nächste Zeile? on Sun, 28 May 2006 14:34:05 GMT]]></title><description><![CDATA[<p>Ohh vielen Dank es funktioniert. Gerade fand ich in meinem Buch das Kapitel &quot;Mehr über Dateien&quot;. Vielleicht hätte ich es mir zuerst ansehen sollen.</p>
<p>Jedoch gibt es immer ein paar Dinge, die man wissen sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1066703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1066703</guid><dc:creator><![CDATA[Meierei]]></dc:creator><pubDate>Sun, 28 May 2006 14:34:05 GMT</pubDate></item><item><title><![CDATA[Reply to fstream getline - Nächste Zeile? on Sun, 28 May 2006 16:29:53 GMT]]></title><description><![CDATA[<p>Mir ist gerade aufgefallen, dass ich doch etwas Scheiße gelabert habe. Also: Wenn du 79 angibst, und die Zeile 78 Zeichen hat, dann setzt er das fail-bit nicht, sondern nimmt das '\n' auch aus dem Stream. Ist ja auch klar, es hat ja alles geklappt. Also brauchst du das mit dem fail gar nicht:</p>
<pre><code class="language-cpp">for(int r = 0; r &lt; 15; ++r) {
                mapFile.getline(maps[i][r], 79);
            }
</code></pre>
<p>Falls du aber noch bedenken willst, dass eine Zeile mal länger als 79 Zeichen ist, kannst du das einbauen:</p>
<pre><code class="language-cpp">for(int r = 0; r &lt; 15; ++r) {
                mapFile.getline(maps[i][r], 79);
                if(mapFile.fail() &amp;&amp; !mapFile.eof()) {
                    mapFile.clear();
                    mapFile.ignore(numeric_limits&lt;streamsize&gt;::max(), '\n');
                }
            }
</code></pre>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1066787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1066787</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sun, 28 May 2006 16:29:53 GMT</pubDate></item><item><title><![CDATA[Reply to fstream getline - Nächste Zeile? on Sun, 28 May 2006 16:58:13 GMT]]></title><description><![CDATA[<p>Jo, habs jetzt so gemacht:</p>
<pre><code class="language-cpp">Field::Field() 
{
	cout &lt;&lt; &quot;Spielfeld laden . . .&quot; &lt;&lt; endl;

	// Load maps - For each map
    for(int i = 0; i &lt; 5; ++i) 
	{ 
		stringstream curMap; 
        curMap &lt;&lt; &quot;map&quot;; 
        curMap.width(2); 
        curMap.fill('0'); 
        curMap &lt;&lt; i + 1 &lt;&lt; &quot;.txt&quot;; 

        ifstream mapFile(curMap.str().c_str()); 

        if(mapFile.fail()) 
            cout &lt;&lt; curMap.str() &lt;&lt; &quot; nicht geladen!&quot; &lt;&lt; endl;
		else
		{
            cout &lt;&lt; curMap.str() &lt;&lt; &quot; geladen!&quot; &lt;&lt; endl;
			// For each row
			for(int r = 0; r &lt; 15; ++r)
				mapFile.getline(maps[i][r], 79);
		}
    }
}
</code></pre>
<p>Passt jetzt, danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1066817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1066817</guid><dc:creator><![CDATA[Meierei]]></dc:creator><pubDate>Sun, 28 May 2006 16:58:13 GMT</pubDate></item></channel></rss>