<?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[Char Array , erstes Zeichen verloren]]></title><description><![CDATA[<p>Hi Leute, ich bin grad dabei, eine Textdatei auszulesen. Funktioniert auch alles super, nur wenn ich versuche das ganze via Zeiger an die main zu liefern geht mir das erste Zeichen im char array verloren. Sprich, wenn ich in der main puffer[0] aufrufe. bei puffer[1] und [2] kommen jeweils die richtigen Zeichen.<br />
Könntest ihr bitte mal drüberschaun bzw. einen Tipp geben, wie man das ganze einfacher gestalten kann?Lerne noch C++ und steh grad total aufem Schlauch, wo das Problem liegt.</p>
<p>Danke schonmal <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>
<pre><code class="language-cpp">int main()
{
	char puffer[256];
	menue();
	eingabe(&amp;puffer[0]);
	cout &lt;&lt; puffer[0];
	getch();
}

void eingabe(char *puffer)
{
	int eingabe;
	cout &lt;&lt; &quot;Bitte waehlen sie aus: &quot;;
	cin &gt;&gt; eingabe;
	cout &lt;&lt; endl;
	switch(eingabe)
	{
	case 1:
		cout &lt;&lt; &quot;Der Text wird eingelesen!&quot; &lt;&lt; endl;
		texteinlesen(&amp;puffer[0]);
		break;
	case 2:
		cout &lt;&lt; &quot;Der Text wird verschluesselt!&quot; &lt;&lt; endl;
		break;
	case 3:
		cout &lt;&lt; &quot;Der Text wird entschlusselt!&quot; &lt;&lt; endl;
		break;
	case 4:
		cout &lt;&lt; &quot;Beenden&quot; &lt;&lt; endl;
		exit(0);
		break;
	default:
		cout &lt;&lt; &quot;Error&quot; &lt;&lt; endl;
	}
}
void texteinlesen(char *puffer)
{
	fstream quelle;
	quelle.open (&quot;C:\\text.txt&quot;, ios::in| ios::binary);
	if(quelle.good())
	{
	while(quelle.getline(puffer, sizeof(puffer)))
	{
		int i = 0;
		cout &lt;&lt; puffer;
		puffer[i] = *puffer;
	}
	}
	else
	{
		cout &lt;&lt; &quot;Fehler beim oeffnen!&quot; &lt;&lt; endl;
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/277085/char-array-erstes-zeichen-verloren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 01:43:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/277085.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Nov 2010 17:46:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Char Array , erstes Zeichen verloren on Fri, 12 Nov 2010 17:46:13 GMT]]></title><description><![CDATA[<p>Hi Leute, ich bin grad dabei, eine Textdatei auszulesen. Funktioniert auch alles super, nur wenn ich versuche das ganze via Zeiger an die main zu liefern geht mir das erste Zeichen im char array verloren. Sprich, wenn ich in der main puffer[0] aufrufe. bei puffer[1] und [2] kommen jeweils die richtigen Zeichen.<br />
Könntest ihr bitte mal drüberschaun bzw. einen Tipp geben, wie man das ganze einfacher gestalten kann?Lerne noch C++ und steh grad total aufem Schlauch, wo das Problem liegt.</p>
<p>Danke schonmal <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>
<pre><code class="language-cpp">int main()
{
	char puffer[256];
	menue();
	eingabe(&amp;puffer[0]);
	cout &lt;&lt; puffer[0];
	getch();
}

void eingabe(char *puffer)
{
	int eingabe;
	cout &lt;&lt; &quot;Bitte waehlen sie aus: &quot;;
	cin &gt;&gt; eingabe;
	cout &lt;&lt; endl;
	switch(eingabe)
	{
	case 1:
		cout &lt;&lt; &quot;Der Text wird eingelesen!&quot; &lt;&lt; endl;
		texteinlesen(&amp;puffer[0]);
		break;
	case 2:
		cout &lt;&lt; &quot;Der Text wird verschluesselt!&quot; &lt;&lt; endl;
		break;
	case 3:
		cout &lt;&lt; &quot;Der Text wird entschlusselt!&quot; &lt;&lt; endl;
		break;
	case 4:
		cout &lt;&lt; &quot;Beenden&quot; &lt;&lt; endl;
		exit(0);
		break;
	default:
		cout &lt;&lt; &quot;Error&quot; &lt;&lt; endl;
	}
}
void texteinlesen(char *puffer)
{
	fstream quelle;
	quelle.open (&quot;C:\\text.txt&quot;, ios::in| ios::binary);
	if(quelle.good())
	{
	while(quelle.getline(puffer, sizeof(puffer)))
	{
		int i = 0;
		cout &lt;&lt; puffer;
		puffer[i] = *puffer;
	}
	}
	else
	{
		cout &lt;&lt; &quot;Fehler beim oeffnen!&quot; &lt;&lt; endl;
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1979612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979612</guid><dc:creator><![CDATA[sometimes]]></dc:creator><pubDate>Fri, 12 Nov 2010 17:46:13 GMT</pubDate></item><item><title><![CDATA[Reply to Char Array , erstes Zeichen verloren on Fri, 12 Nov 2010 18:01:48 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">while(quelle.getline(puffer, sizeof(puffer)))
    {
        int i = 0;
        cout &lt;&lt; puffer;
        puffer[i] = *puffer;
    }
</code></pre>
<p>Dies hier kommt dir nicht irgendwie komisch vor? Was ist denn wohl i? Und was soll das überhaupt bewirken?</p>
<p>Allgemein: Gibt es irgendeinen Grund, warum du dir selbst dies antust? std::string benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979619</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 12 Nov 2010 18:01:48 GMT</pubDate></item><item><title><![CDATA[Reply to Char Array , erstes Zeichen verloren on Fri, 12 Nov 2010 18:00:45 GMT]]></title><description><![CDATA[<p>Ui. Also, zunächst sticht mir das hier ins Auge:</p>
<pre><code class="language-cpp">while(quelle.getline(puffer, sizeof(puffer)))
    {
        int i = 0;
        cout &lt;&lt; puffer;
        puffer[i] = *puffer;
    }
</code></pre>
<p>hier ist sizeof(puffer) die Länge eines Zeigers, nicht die des Buffers, auf den er zeigt (d.h. vermutlich 4 oder 8). Im Schleifenkörper ist i immer 0, d.h.</p>
<pre><code class="language-cpp">puffer[i] = *puffer;
</code></pre>
<p>macht gar nichts.</p>
<p>Ich vermute aber, dass das Problem, in das du läufst, Folgendes ist: Nach</p>
<pre><code class="language-cpp">int eingabe;
    cout &lt;&lt; &quot;Bitte waehlen sie aus: &quot;;
    cin &gt;&gt; eingabe;
</code></pre>
<p>steckt das, was nach der Zahl eingegeben wurde, noch im Eingabestrom - inklusive des Zeilenendes. Das heißt, selbst wenn du da nur eine Zahl eingibst, steckt &quot;\n&quot; noch in std::cin und wird beim nächsten getline erst ausgelesen.</p>
<p>Aber was ganz anderes - warum plagst du dich mit char-Arrays rum und benutzt nicht einfach std::string?</p>
<p>(SeppJ hätte wahrscheinlich eine Ahnung, aus welchem Buch du das hast <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="😉"
    /> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979620</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 12 Nov 2010 18:00:45 GMT</pubDate></item><item><title><![CDATA[Reply to Char Array , erstes Zeichen verloren on Fri, 12 Nov 2010 18:03:45 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>(SeppJ hätte wahrscheinlich eine Ahnung, aus welchem Buch du das hast <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="😉"
    /> )</p>
</blockquote>
<p>Ja, habe ich, aber ich wollte abwarten, was die Frage nach dem &quot;warum?&quot; als Antwort ergibt. Ich vermute mal, dass auf Beispiele in dem Buch das nicht genannt werden darf verwiesen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979623</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 12 Nov 2010 18:03:45 GMT</pubDate></item><item><title><![CDATA[Reply to Char Array , erstes Zeichen verloren on Fri, 12 Nov 2010 18:12:11 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<pre><code class="language-cpp">while(quelle.getline(puffer, sizeof(puffer)))
    {
        int i = 0;
        cout &lt;&lt; puffer;
        puffer[i] = *puffer;
    }
</code></pre>
<p>Dies hier kommt dir nicht irgendwie komisch vor? Was ist denn wohl i? Und was soll das überhaupt bewirken?</p>
<p>Allgemein: Gibt es irgendeinen Grund, warum du dir selbst dies antust? std::string benutzen.</p>
</blockquote>
<p>Ist mir direkt nach dem abschicken des posts aufgefallen. Leider konnte ich nicht editieren. Naja C++ machen wir in der Schule, und da wurde es uns so gezeigt.<br />
Das i fehlt an dieser Stelle, weil ich schon zich Sachen am ausprobieren bin, und es vorhin vergessen hab wieder dazu zu packen.<br />
Aus einem Buch habe ich diesen Quelltext nicht, hab ich selbst gemacht.<br />
Ist aber nur ein kleiner teil des Programms. Später muss ich das ausgelesene noch verschlüsselt in eine andere Datei schreiben.</p>
<p>Ich glaube, ich weiß worauf ihr hinauswollt, mit dem Buch, vielleicht c++ von a-z <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ? ja ich hab dieses Buch, aber lese es kaum bis garnicht.<br />
Aber wie gesagt der entstandende Quelltext ist nicht aus dem Buch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979631</guid><dc:creator><![CDATA[sometimes]]></dc:creator><pubDate>Fri, 12 Nov 2010 18:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to Char Array , erstes Zeichen verloren on Fri, 12 Nov 2010 18:17:27 GMT]]></title><description><![CDATA[<p>sometimes schrieb:</p>
<blockquote>
<p>Naja C++ machen wir in der Schule, und da wurde es uns so gezeigt.</p>
</blockquote>
<p>Dann ist jetzt die entscheidende Frage: Wenn du nun std::string benutzt, ist dein Lehrer dann der Typ der sagt &quot;Wow! Das kannte ich noch gar nicht. Toll, dass du das gefunden hast!&quot; oder der Typ &quot;String gab's damals nicht als ich Programmieren gelernt habe, lernt gefälligst das was ich euch beibringe! Setzen! Sechs!&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979633</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 12 Nov 2010 18:17:27 GMT</pubDate></item><item><title><![CDATA[Reply to Char Array , erstes Zeichen verloren on Fri, 12 Nov 2010 18:36:05 GMT]]></title><description><![CDATA[<p>So ich wusste doch, das ich hier noch registriert bin <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>Ich weiss nicht, ob das uns beigebrachte dem Aktuellen entspricht.<br />
Jedenfalls hab ich damals für andere Aufgaben ebenfalls ein bisschen im Internet gesucht und etwas verwendet, was wir nicht gemacht hatten, wobei aber das selbe Ergebnis bei rauskaum. Man wurde nur angemosert mit&quot;Soweit sind wir noch nicht oder das ist nicht das, was wir gemacht haben&quot;. Da bleibt mir dann eben nichts anderes übrig.<br />
Wollt mir jetzt zu Weihnachten nen gutes Buch holen Der C++ Programmierer eventuell noch den C++ Primer, falls er sich finden lässt, um mal das aktuelle zu lernen.<br />
Aber ich drifte hier zuweit ab^^</p>
<p>@seldon</p>
<blockquote>
<p>steckt das, was nach der Zahl eingegeben wurde, noch im Eingabestrom - inklusive des Zeilenendes. Das heißt, selbst wenn du da nur eine Zahl eingibst, steckt &quot;\n&quot; noch in std::cin und wird beim nächsten getline erst ausgelesen.</p>
</blockquote>
<p>ist das irgendwie ein Hinweis?<br />
ich glaub was dem entsprechen könnte hatten wir noch nicht.<br />
Meinst du vielleicht cin.ignore()<br />
Hab das noch aus einem C++ Buch in Erinnerung, es setzt den Textcursor zum Anfang zurück - oder so ähnlich.<br />
Das vielleicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979634</guid><dc:creator><![CDATA[B4sic]]></dc:creator><pubDate>Fri, 12 Nov 2010 18:36:05 GMT</pubDate></item><item><title><![CDATA[Reply to Char Array , erstes Zeichen verloren on Fri, 12 Nov 2010 18:50:41 GMT]]></title><description><![CDATA[<p>Mal an einem Stringstream demonstriert (ein Stringstream ist wie jeder andere Ein- bzw. Ausgabestrom, nur holt er seine Daten aus bzw. schreibt sie in einen String):</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;string&gt;

int main() {
  std::istringstream str_in(&quot;123\n&quot;
                            &quot;abc\n&quot;
                            &quot;def\n&quot;);

  int zahl;

  str_in &gt;&gt; zahl;
  std::cout &lt;&lt; &quot;Zahl: &quot; &lt;&lt; zahl &lt;&lt; '\n';

  std::string zeile;

  for(int i = 1; std::getline(str_in, zeile); ++i) {
    std::cout &lt;&lt; &quot;Zeile &quot; &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; zeile &lt;&lt; '\n';
  }
}

// Ausgabe:
// 
// Zahl: 123
// Zeile 1:
// Zeile 2: abc
// Zeile 3: def
</code></pre>
<p>Das Einlesen in zahl nimmt nur (!) die Zahl aus dem Eingabestrom. Es bleibt in diesem Fall &quot;\nabc\ndef\n&quot;, also drei Zeilen, von denen die erste leer ist.</p>
<p>Ein Zeilenrest lässt sich aus einem Eingabestrom beispielsweise so entfernen:</p>
<pre><code class="language-cpp">#include &lt;limits&gt;

// ...

eingabestrom.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), '\n');
</code></pre>
<p>...was soviel bedeutet wie &quot;ignoriere gaaaanz viele Zeichen aus eingabestrom, aber nicht weiter als bis zum nächsten Zeilenumbruch&quot;. Alternativ bietet es sich an, die Eingabe zeilenweise aus std::cin zu lesen und per Stringstream zu parsen, und natürlich kann man auch einfach eine Zeile einlesen und ignorieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979648</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 12 Nov 2010 18:50:41 GMT</pubDate></item><item><title><![CDATA[Reply to Char Array , erstes Zeichen verloren on Fri, 12 Nov 2010 19:58:43 GMT]]></title><description><![CDATA[<p>Okey danke für eure Hilfe, muss das jetzt nur noch auf die Streams anpassen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979668</guid><dc:creator><![CDATA[B4sic]]></dc:creator><pubDate>Fri, 12 Nov 2010 19:58:43 GMT</pubDate></item><item><title><![CDATA[Reply to Char Array , erstes Zeichen verloren on Sat, 13 Nov 2010 20:53:56 GMT]]></title><description><![CDATA[<p>So hab ein neues Problem, hab das Programm etwas umgeschrieben.Bin doch erstmal noch bei den streams geblieben.<br />
Es öffnet die Textdatei und liest sie auch aus(nicht ganz oder fehlerhaft)<br />
Es werden prompt ab dem dritten Zeichen keine Zeichen mehr übernommen(also dem element [2]. Ich find aber nirgends einen Fehler und der Quelltext scheint für mich demnach auch logisch. Ich bitte euch nochmal drüber zu schaun. Ich glaub er geht von selbst in einen anderen Bereich und holt sich da irgendwelche Werte, weil in der eingetragen Textdatei sind wirwarr Zeichen.</p>
<p>danke <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>
<pre><code class="language-cpp">void eingabe(char *puffer)
{
	int eingabe;
	cout &lt;&lt; &quot;Bitte waehlen sie aus: &quot;;
	cin &gt;&gt; eingabe;
	cout &lt;&lt; endl;

	switch(eingabe)
	{
	case 1:
		texteinlesen(&amp;puffer[0]);
		cout &lt;&lt; &quot;Der Text wurde erfolgreich eingelesen!&quot; &lt;&lt; endl;
		cout &lt;&lt; endl;
		cout &lt;&lt; puffer[0];
		cout &lt;&lt; puffer[1];
		cout &lt;&lt; puffer[2];
		cout &lt;&lt; puffer[3];
		cout &lt;&lt; puffer[4];
		break;
	case 2:
		textverschluesseln(&amp;puffer[0]);
		cout &lt;&lt; &quot;Der Text wurde erfolgreich verschluesselt!&quot; &lt;&lt; endl;
		cout &lt;&lt; endl;
		break;
	case 3:
		cout &lt;&lt;&quot;Der Text wurde erfolgreich entschluesselt!&quot; &lt;&lt; endl;
		break;
	case 4:
		cout &lt;&lt; &quot;Beenden&quot; &lt;&lt; endl;
		break;
	default:
		cout &lt;&lt; &quot;Error, Falsche eingabe!!!&quot; &lt;&lt; endl &lt;&lt; endl &lt;&lt; endl;
	}
}
void texteinlesen(char *puffer)
{
	fstream quelle;
	quelle.open (&quot;C:\\text.txt&quot;, ios::in| ios::binary);
	if(quelle.good())
	{
		while(quelle.getline(puffer, sizeof(puffer)))
		{

		}
	}
	else
	{
			cout &lt;&lt; &quot;Fehler beim oeffnen!&quot; &lt;&lt; endl;
	}
}

void textverschluesseln(char *puffer)
{
	fstream ziel;
	ziel.open (&quot;C:\\text2.txt&quot;, ios::in | ios::out | ios::binary);
	if(ziel.good())
	{
		cout &lt;&lt; &quot;Datei erfolgreich geoeffnet!&quot; &lt;&lt; endl;
	}
	else
	{
		cout &lt;&lt; &quot;Fehler beim oeffenen!&quot; &lt;&lt; endl;
	}

	ziel &lt;&lt; puffer[0];
	ziel &lt;&lt; puffer[1];
	ziel &lt;&lt; puffer[2];
	ziel &lt;&lt; puffer[3];
	ziel &lt;&lt; puffer[4];
	ziel &lt;&lt; puffer[5];
	ziel &lt;&lt; puffer[6];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1980101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1980101</guid><dc:creator><![CDATA[B4sic]]></dc:creator><pubDate>Sat, 13 Nov 2010 20:53:56 GMT</pubDate></item></channel></rss>