<?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[Dicker Logischer Fehler - ich finde aber keine Lösung]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich sitze hier gerade vor einem Programm welches eigentlich sehr einfach ist. Dachte ich. Jetzt hänge ich hier vor dem einzigen Fehler finde aber keine Lösung. Ich hoffe mir mag einer helfen.</p>
<p>Also zu dem Programm:<br />
Es gibt 2 Dateien mit Datensätzen der Struktur &quot;zahl,name&quot;.<br />
z.B.</p>
<pre><code>Datei 1 oder auch a:
1,hans
3,peter
4,ulf
5,ralf
7,manuel
9,erik
11,till
</code></pre>
<pre><code>Datei 2 oder auch b:
2,sabine
6,petra
8,susi
10,berta
</code></pre>
<p>Diese sollen nun geordenet nach ihrer Nummer aufsteigend in eine neue Datei (Datei 3 - oder auch c) eingeordnet werden. Wie ihr seht sind die Ausgangsdateien ihrerseits auch schon geordnet.</p>
<pre><code>Datei 3
1,hans
2,sabine
3,peter
4,ulf
5,ralf
6,petra
7,manuel
8,susi
9,erik
10,berta
11,till
</code></pre>
<p>Diese Aufgabe hat die Funktion merge:</p>
<pre><code class="language-cpp">void merge(ifstream&amp; a, ifstream&amp; b, ofstream&amp; c){ 
  string buffer_a, buffer_b;
  // Erste Zeilen aus beiden Dateien holen
  getline(a, buffer_a);
  getline(b, buffer_b); 

  // nun wird in Abhängigkeit der zahl sortiert,
  // solange bis ein Dateizeiger am Ende ist.
  while (!a.eof() &amp;&amp; !b.eof()) {     
    if (buffer_a &lt;= buffer_b) { // Unter Java hätte das nie funktiniert, aber hier kein Problem
      c&lt;&lt;buffer_a&lt;&lt;endl; // Buffer A in Ausgabedatei schreiben
      getline(a, buffer_a); // Nächste Zeile aus A holen
    }
    else{    
      c&lt;&lt;buffer_b&lt;&lt;endl; // Buffer B in Ausgabedatei schreiben
      getline(b, buffer_b); // Nächste Zeile aus B holen
    }
  }
  //##########################################
  // Nun sind buffer_a und buffer_b gefüllt
  // Zum nächsen Schritt wird nun einer der beiden Inhalte verschlampt
  // Hier ist auch der Fehler, ich habe lange rumprobiert mit verschiedenen
  // Abfrage doch noch zu einer korrekten Ausgabe zu kommen, leider vergebens,
  // steh leider auf dem Schlauch
  //##########################################

  // Falls eine der beiden Dateien zuende ist, die restlichen Inhalte aus der anderen Datei noch schreiben
  while (!a.eof()){
    c&lt;&lt;buffer_a&lt;&lt;endl; // Buffer A in Ausgabedatei schreiben
    getline(a, buffer_a); // Nächste Zeile aus A holen
  }  

  while (!b.eof()){
    c&lt;&lt;buffer_b&lt;&lt;endl; // Buffer B in Ausgabedatei schreiben
    getline(b, buffer_b); // Nächste Zeile aus B holen
  }  
}
</code></pre>
<p>Ich hoffe ihr habt meine Anmerkungen zum Fehler gefunden und könnt mir ohne, dass ihr viel Arbeit habt helfen.</p>
<p>MFG</p>
<p>Fabian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/129707/dicker-logischer-fehler-ich-finde-aber-keine-lösung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 07:31:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/129707.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 15 Dec 2005 23:36:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dicker Logischer Fehler - ich finde aber keine Lösung on Thu, 15 Dec 2005 23:36:51 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich sitze hier gerade vor einem Programm welches eigentlich sehr einfach ist. Dachte ich. Jetzt hänge ich hier vor dem einzigen Fehler finde aber keine Lösung. Ich hoffe mir mag einer helfen.</p>
<p>Also zu dem Programm:<br />
Es gibt 2 Dateien mit Datensätzen der Struktur &quot;zahl,name&quot;.<br />
z.B.</p>
<pre><code>Datei 1 oder auch a:
1,hans
3,peter
4,ulf
5,ralf
7,manuel
9,erik
11,till
</code></pre>
<pre><code>Datei 2 oder auch b:
2,sabine
6,petra
8,susi
10,berta
</code></pre>
<p>Diese sollen nun geordenet nach ihrer Nummer aufsteigend in eine neue Datei (Datei 3 - oder auch c) eingeordnet werden. Wie ihr seht sind die Ausgangsdateien ihrerseits auch schon geordnet.</p>
<pre><code>Datei 3
1,hans
2,sabine
3,peter
4,ulf
5,ralf
6,petra
7,manuel
8,susi
9,erik
10,berta
11,till
</code></pre>
<p>Diese Aufgabe hat die Funktion merge:</p>
<pre><code class="language-cpp">void merge(ifstream&amp; a, ifstream&amp; b, ofstream&amp; c){ 
  string buffer_a, buffer_b;
  // Erste Zeilen aus beiden Dateien holen
  getline(a, buffer_a);
  getline(b, buffer_b); 

  // nun wird in Abhängigkeit der zahl sortiert,
  // solange bis ein Dateizeiger am Ende ist.
  while (!a.eof() &amp;&amp; !b.eof()) {     
    if (buffer_a &lt;= buffer_b) { // Unter Java hätte das nie funktiniert, aber hier kein Problem
      c&lt;&lt;buffer_a&lt;&lt;endl; // Buffer A in Ausgabedatei schreiben
      getline(a, buffer_a); // Nächste Zeile aus A holen
    }
    else{    
      c&lt;&lt;buffer_b&lt;&lt;endl; // Buffer B in Ausgabedatei schreiben
      getline(b, buffer_b); // Nächste Zeile aus B holen
    }
  }
  //##########################################
  // Nun sind buffer_a und buffer_b gefüllt
  // Zum nächsen Schritt wird nun einer der beiden Inhalte verschlampt
  // Hier ist auch der Fehler, ich habe lange rumprobiert mit verschiedenen
  // Abfrage doch noch zu einer korrekten Ausgabe zu kommen, leider vergebens,
  // steh leider auf dem Schlauch
  //##########################################

  // Falls eine der beiden Dateien zuende ist, die restlichen Inhalte aus der anderen Datei noch schreiben
  while (!a.eof()){
    c&lt;&lt;buffer_a&lt;&lt;endl; // Buffer A in Ausgabedatei schreiben
    getline(a, buffer_a); // Nächste Zeile aus A holen
  }  

  while (!b.eof()){
    c&lt;&lt;buffer_b&lt;&lt;endl; // Buffer B in Ausgabedatei schreiben
    getline(b, buffer_b); // Nächste Zeile aus B holen
  }  
}
</code></pre>
<p>Ich hoffe ihr habt meine Anmerkungen zum Fehler gefunden und könnt mir ohne, dass ihr viel Arbeit habt helfen.</p>
<p>MFG</p>
<p>Fabian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/943197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943197</guid><dc:creator><![CDATA[faleX]]></dc:creator><pubDate>Thu, 15 Dec 2005 23:36:51 GMT</pubDate></item><item><title><![CDATA[Reply to Dicker Logischer Fehler - ich finde aber keine Lösung on Fri, 16 Dec 2005 02:28:01 GMT]]></title><description><![CDATA[<p>Ich sehe keinen Fehler.</p>
<p>Wie manifestiert er sich denn?<br />
Falls du in der Ausgabedatei leerzeilen haben solltest, dann liegt das daran, dass du Leerzeilen in den Eingabedateien hast (vermutlich am ende). Aber sonst sieht es ok aus...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/943214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943214</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 16 Dec 2005 02:28:01 GMT</pubDate></item><item><title><![CDATA[Reply to Dicker Logischer Fehler - ich finde aber keine Lösung on Fri, 16 Dec 2005 06:32:42 GMT]]></title><description><![CDATA[<p>also:<br />
buffer_b ist gefüllt mit: 10,berta , das Dateiende wurde erreicht.<br />
Die große Schleife ist vorüber.<br />
Jetzt wird die schleife mit while(!b.eof()) nicht mehr ausgeführt.<br />
Nur die !a.eof()<br />
10,berta erscheint nicht in der Ausgabedatei.<br />
10,berta müsste jetzt noch unter den restlichen Werten einsortiert werden.</p>
<p>Gruss<br />
Fabian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/943232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943232</guid><dc:creator><![CDATA[faleX]]></dc:creator><pubDate>Fri, 16 Dec 2005 06:32:42 GMT</pubDate></item><item><title><![CDATA[Reply to Dicker Logischer Fehler - ich finde aber keine Lösung on Fri, 16 Dec 2005 07:34:54 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>ist das nicht der typische stream-fehler, dass sobald die letzte zeile gelesen wurde b.eof() wahr ist, und deshalb buffer_b nicht mehr geschrieben wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/943261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943261</guid><dc:creator><![CDATA[zam0nia]]></dc:creator><pubDate>Fri, 16 Dec 2005 07:34:54 GMT</pubDate></item><item><title><![CDATA[Reply to Dicker Logischer Fehler - ich finde aber keine Lösung on Fri, 16 Dec 2005 08:16:14 GMT]]></title><description><![CDATA[<p>Du gehts davon aus, das nach der Schleife<br />
while (!a.eof() &amp;&amp; !b.eof())<br />
buffer_a und buffer_b nach c geschreiben wurden.<br />
Dem ist aber nie so. Einer von beiden wurde noch nicht nach c geschreiben!<br />
leider weist du nicht, welcher!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/943291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943291</guid><dc:creator><![CDATA[AlterMann]]></dc:creator><pubDate>Fri, 16 Dec 2005 08:16:14 GMT</pubDate></item></channel></rss>