<?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[Textdatei schreiben  - Probleme mit ausgelagerter Funktion]]></title><description><![CDATA[<p>Hallo Forumsgemeinde,</p>
<p>ich heiße Tobias und wollte euch an dieser Stelle um Hilfe bitten. Da es um das o.g. Thema geht, mache ich hier einfach mal weiter. Hoffe das ist ok.</p>
<p>Für´s Sudium muss ich ein Pflichtprogramm schreiben, stehe nun aber vor einem Problem, welches ich nicht gelöst bekomme.</p>
<p>Wir sollen 10 Zahlen einlesen, sortieren (Insertion Sort) und in einer Datei ausgeben. Neben der eingegebenenen Reihenfolge am Anfang der Textdatei und der sortierten Reihenfolge am Ende (funktioniert auch schon bis hierhin) soll mittendrin nun sinngemäß folgendes stehen:<br />
Die Zahl X wurde an der Xten Stelle eingetragen.</p>
<p>Habe zuerst versucht einfach mit outfile &lt;&lt;... in der Funktion weiter zu machen, wie zuvor auch - Fehler<br />
Also versucht die zu erstellende Text-Datei in der Funktion ein weiteres Mal zu öffnen und den genannten Text auszugeben, dann wird aber mein zuerst eingegebener Text gelöscht. Wie kann ich dieses Problem umgehen?</p>
<p>Schonmal vielen Dank für eure Hilfe</p>
<p>Tobias</p>
<p>Anbei mal der Quellcode</p>
<pre><code class="language-cpp">#include &lt;iostream.h&gt;
#include &lt;fstream&gt;
using namespace std;

int main(void)
      {
      int Zahlen[10],x,z;
      void insertionsort(int x[],int anzahl_zahlen);
      std::ofstream outfile;                        
      outfile.open(&quot;Protokoll.txt&quot;);                    /*öffnen der Protokoll-Datei,damit Daten automatisch eingetragen werden können*/
      outfile &lt;&lt; &quot;Ausgangsdaten : &quot; &lt;&lt; std::flush;
      cout&lt;&lt;&quot;Bitte geben Sie 10 Zahlen ein : &quot;&lt;&lt;endl;
      for(x=0;x&lt;10;x++)
                 { 
                 cout&lt;&lt;&quot;Zahl &quot;&lt;&lt;x+1&lt;&lt;&quot;: &quot;&lt;&lt;flush;
                 cin&gt;&gt;Zahlen[x]; 
                 outfile &lt;&lt; Zahlen[x]&lt;&lt; &quot; &quot;&lt;&lt;std::flush;
                 }
      outfile &lt;&lt; &quot; &quot;&lt;&lt;std::endl;
      outfile &lt;&lt; &quot; &quot;&lt;&lt;std::endl;
      insertionsort(Zahlen,10);     /*Aufruf der Insertionsort-Funktion nachdem 10 Zahlen eingegeben wurden. Übergeben wird das Feld mit 10 Zahlenwerten*/
      cout&lt;&lt;endl&lt;&lt;&quot;Hier nun die Zahlen, sortiert von klein nach gross&quot;&lt;&lt;endl;      
      outfile &lt;&lt; &quot;Sortierte Daten : &quot; &lt;&lt;  std::endl;
      for(x=0;x&lt;10;x++)
      {
      cout&lt;&lt;&quot;Zahl &quot;&lt;&lt;x+1&lt;&lt;&quot;: &quot;&lt;&lt;Zahlen[x]&lt;&lt;endl;  /*Ausgabe der sortierten Zahlen, nachdem sie die Funktion durchlaufen haben*/
      outfile &lt;&lt; Zahlen[x] &lt;&lt; &quot; &quot; &lt;&lt; std::flush;
      }
      outfile &lt;&lt; &quot; &quot;&lt;&lt;std::endl;
      outfile &lt;&lt; &quot; &quot;&lt;&lt;std::endl;

  outfile.close();
  return 0;

      cin&gt;&gt;z;                          /*Hilfe, damit das DOS-Fenster nicht gleich wieder schliesst*/
      }

/*Hier beginnt die ausgelagerte Insertionsort-Funktion*/

      void insertionsort(int x[],int anzahl_zahlen)  /*In dieser Funktion wird nun sortiert*/
      {
      int Vergleichszahl,i;

      for(int j=1;j&lt;anzahl_zahlen;j++)      
      {
      Vergleichszahl=x[j];                  /*j=1, weil die 2. eingegebene Zahl also X[1] mit der ersten X[0]verglichen wird*/
      i=j-1;

      while(x[i]&gt;Vergleichszahl &amp;&amp; i&gt;=0)    /*ab hier vergleich immer weiter nach unten, d.h. 6. Eingabe wird mit 5.,4.,3.,2. etc verglichen. Ist x[i]&gt;Vergleichszahl nicht mehr erfüllt, geht die for Schleife mit folgendem Befehl weiter x[i+1]=Vergleichszahl; */
      {
      x[i+1]=x[i];
      i--;
      }
      x[i+1]=Vergleichszahl;
      }
      }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/267060/textdatei-schreiben-probleme-mit-ausgelagerter-funktion</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 17:20:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/267060.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 18 May 2010 14:46:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Textdatei schreiben  - Probleme mit ausgelagerter Funktion on Tue, 18 May 2010 14:46:58 GMT]]></title><description><![CDATA[<p>Hallo Forumsgemeinde,</p>
<p>ich heiße Tobias und wollte euch an dieser Stelle um Hilfe bitten. Da es um das o.g. Thema geht, mache ich hier einfach mal weiter. Hoffe das ist ok.</p>
<p>Für´s Sudium muss ich ein Pflichtprogramm schreiben, stehe nun aber vor einem Problem, welches ich nicht gelöst bekomme.</p>
<p>Wir sollen 10 Zahlen einlesen, sortieren (Insertion Sort) und in einer Datei ausgeben. Neben der eingegebenenen Reihenfolge am Anfang der Textdatei und der sortierten Reihenfolge am Ende (funktioniert auch schon bis hierhin) soll mittendrin nun sinngemäß folgendes stehen:<br />
Die Zahl X wurde an der Xten Stelle eingetragen.</p>
<p>Habe zuerst versucht einfach mit outfile &lt;&lt;... in der Funktion weiter zu machen, wie zuvor auch - Fehler<br />
Also versucht die zu erstellende Text-Datei in der Funktion ein weiteres Mal zu öffnen und den genannten Text auszugeben, dann wird aber mein zuerst eingegebener Text gelöscht. Wie kann ich dieses Problem umgehen?</p>
<p>Schonmal vielen Dank für eure Hilfe</p>
<p>Tobias</p>
<p>Anbei mal der Quellcode</p>
<pre><code class="language-cpp">#include &lt;iostream.h&gt;
#include &lt;fstream&gt;
using namespace std;

int main(void)
      {
      int Zahlen[10],x,z;
      void insertionsort(int x[],int anzahl_zahlen);
      std::ofstream outfile;                        
      outfile.open(&quot;Protokoll.txt&quot;);                    /*öffnen der Protokoll-Datei,damit Daten automatisch eingetragen werden können*/
      outfile &lt;&lt; &quot;Ausgangsdaten : &quot; &lt;&lt; std::flush;
      cout&lt;&lt;&quot;Bitte geben Sie 10 Zahlen ein : &quot;&lt;&lt;endl;
      for(x=0;x&lt;10;x++)
                 { 
                 cout&lt;&lt;&quot;Zahl &quot;&lt;&lt;x+1&lt;&lt;&quot;: &quot;&lt;&lt;flush;
                 cin&gt;&gt;Zahlen[x]; 
                 outfile &lt;&lt; Zahlen[x]&lt;&lt; &quot; &quot;&lt;&lt;std::flush;
                 }
      outfile &lt;&lt; &quot; &quot;&lt;&lt;std::endl;
      outfile &lt;&lt; &quot; &quot;&lt;&lt;std::endl;
      insertionsort(Zahlen,10);     /*Aufruf der Insertionsort-Funktion nachdem 10 Zahlen eingegeben wurden. Übergeben wird das Feld mit 10 Zahlenwerten*/
      cout&lt;&lt;endl&lt;&lt;&quot;Hier nun die Zahlen, sortiert von klein nach gross&quot;&lt;&lt;endl;      
      outfile &lt;&lt; &quot;Sortierte Daten : &quot; &lt;&lt;  std::endl;
      for(x=0;x&lt;10;x++)
      {
      cout&lt;&lt;&quot;Zahl &quot;&lt;&lt;x+1&lt;&lt;&quot;: &quot;&lt;&lt;Zahlen[x]&lt;&lt;endl;  /*Ausgabe der sortierten Zahlen, nachdem sie die Funktion durchlaufen haben*/
      outfile &lt;&lt; Zahlen[x] &lt;&lt; &quot; &quot; &lt;&lt; std::flush;
      }
      outfile &lt;&lt; &quot; &quot;&lt;&lt;std::endl;
      outfile &lt;&lt; &quot; &quot;&lt;&lt;std::endl;

  outfile.close();
  return 0;

      cin&gt;&gt;z;                          /*Hilfe, damit das DOS-Fenster nicht gleich wieder schliesst*/
      }

/*Hier beginnt die ausgelagerte Insertionsort-Funktion*/

      void insertionsort(int x[],int anzahl_zahlen)  /*In dieser Funktion wird nun sortiert*/
      {
      int Vergleichszahl,i;

      for(int j=1;j&lt;anzahl_zahlen;j++)      
      {
      Vergleichszahl=x[j];                  /*j=1, weil die 2. eingegebene Zahl also X[1] mit der ersten X[0]verglichen wird*/
      i=j-1;

      while(x[i]&gt;Vergleichszahl &amp;&amp; i&gt;=0)    /*ab hier vergleich immer weiter nach unten, d.h. 6. Eingabe wird mit 5.,4.,3.,2. etc verglichen. Ist x[i]&gt;Vergleichszahl nicht mehr erfüllt, geht die for Schleife mit folgendem Befehl weiter x[i+1]=Vergleichszahl; */
      {
      x[i+1]=x[i];
      i--;
      }
      x[i+1]=Vergleichszahl;
      }
      }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1899067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1899067</guid><dc:creator><![CDATA[Tobias_Hessen]]></dc:creator><pubDate>Tue, 18 May 2010 14:46:58 GMT</pubDate></item><item><title><![CDATA[Reply to Textdatei schreiben  - Probleme mit ausgelagerter Funktion on Tue, 18 May 2010 15:02:35 GMT]]></title><description><![CDATA[<p>Zunächst fällt mir auf, dass da was net stimmt <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="😃"
    /></p>
<p>Zeile 1: #include &lt;iostream&gt;<br />
Zeile 8: Funktionsdeklarationen gehören nicht in den Main-Rumpf, sondern außerhalb davor.<br />
Zeile 39: nach dem Return nicht sinngemäß, wenn dann davor.</p>
<p>Zu den Fragen.<br />
Eine Datei zu öffnen, während sie schon offen ist, dürfte schon net gehen, vermute ich mal. Ist auch nicht nötig. Du hast ja schon dein &quot;Filehandle&quot;, dass du ja an andere Funktionen weitergeben kannst.<br />
Falls du doch unbedingt die Datei noch einmal öffnen willst, so musst du sie vorher erst wieder schließen. Beim Öffnen kann man als zweiten Parameter der Funktion open diverse Eigenschaften angeben. So zum Beispiel ios::app zum Anhaengen von Daten.</p>
<p>Hier mal nen Codeschnipsel zum Uebergeben des ofstream-Objektes</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;

using namespace std;

void foo(ofstream &amp;out)
{
	out &lt;&lt; &quot;in der Funktion foo&quot; &lt;&lt; endl;
}

int main()
{
	ofstream out;

	out.open(&quot;test.txt&quot;, ios::out);

	out &lt;&lt; &quot;vor der Funktion foo&quot; &lt;&lt; endl;

	foo(out);

	out &lt;&lt; &quot;nach der Funktion foo&quot; &lt;&lt; endl;

	out.close();

	return 0;
}
</code></pre>
<p>// Edit: Zeile 1</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1899084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1899084</guid><dc:creator><![CDATA[BasicMan01]]></dc:creator><pubDate>Tue, 18 May 2010 15:02:35 GMT</pubDate></item><item><title><![CDATA[Reply to Textdatei schreiben  - Probleme mit ausgelagerter Funktion on Tue, 18 May 2010 15:59:37 GMT]]></title><description><![CDATA[<p>Hallo Basicman01,</p>
<p>habe das Problem, dank deiner Hilfe, (vorerst) gelöst bekommen</p>
<p>Zeile 8 und 45) void insertionsort(int x[],int anzahl_zahlen,<strong>ofstream &amp;Textdatei</strong>);<br />
Zeile 21) insertionsort(Zahlen,10,<strong>Textdatei</strong>);</p>
<p>Musste den offtream noch in die Funktion einbinden.</p>
<p>Vielen Dak und Grüße</p>
<p>Tobias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1899123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1899123</guid><dc:creator><![CDATA[Tobias_Hessen]]></dc:creator><pubDate>Tue, 18 May 2010 15:59:37 GMT</pubDate></item></channel></rss>