<?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[Frage zu folgendem Code - Zeiger richtig positionieren]]></title><description><![CDATA[<p>Hi Leuts,<br />
hab mir ein Programm, mit dem man beliebig viele Zahlen eingeben kann und anschließend wieder ausgeben. Beim Beenden werden die Zahlen gespeichert und beim erneuten wieder eingelesen. Nun möchte ich es so ändern, das man die Liste beim erneuten Einlesen der alten Zahlen erweitern kann. Jedoch speichert es mir immer nur die aktuellen Zahlen - die alten gehen irgendwie verloren?</p>
<p>Wie muss ich das umschreiben?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;conio.h&gt;
#include &lt;fstream&gt;

using namespace std;

int main()
{
    struct Memory
    {
        float value; 
        Memory* next;
    };

    Memory* currentMemory;

    Memory* lastMemory=0;
    Memory* start=0;

    ifstream inputFile(&quot;Zahlen.dat&quot;); 
    istream* inputStream; 
    if(inputFile)
    {
        cout &lt;&lt; &quot;File has been found - using it as input&quot; &lt;&lt; endl;
        inputStream=&amp;inputFile;
        inputStream=&amp;cin;
    }
    else
    {
        cout &lt;&lt; &quot;No file has been found - please enter some numbers, end with 0&quot; &lt;&lt; endl;
        inputStream=&amp;cin;
    }

    while(true)
    {
        cout &lt;&lt; &quot;Input : &quot;;

        float value=0; 
        (*inputStream) &gt;&gt; value;

        if(value==0)
        {
            break;
        }

        currentMemory=start; 
        while(currentMemory!=0
        {
            if(currentMemory-&gt;value==value)
            {
                break;
            }

            currentMemory = currentMemory-&gt;next;
        }

        if(currentMemory==0) 
        {
            currentMemory=new Memory;
            if(start==0)
            {
                start=currentMemory;
            }
            if(lastMemory!=0)
            {
                lastMemory-&gt;next=currentMemory;
            }

            currentMemory-&gt;value=value;
            currentMemory-&gt;next=0; 

            lastMemory=currentMemory;
        }
        else
        {
            cout &lt;&lt; &quot;The number &quot; &lt;&lt; value &lt;&lt; &quot; has already been in the list - skipping it&quot; &lt;&lt; endl;
        }
    }
    cout &lt;&lt; endl &lt;&lt; endl &lt;&lt; &quot;Output :&quot; &lt;&lt; endl &lt;&lt; endl ;
    currentMemory=start; 
    while(currentMemory!=0) 
    {
        cout &lt;&lt; (currentMemory-&gt;value) &lt;&lt; endl;
        currentMemory = currentMemory-&gt;next;
    }

    cout &lt;&lt; &quot;Saving the list to a file&quot; &lt;&lt; endl;
    {  
	    ofstream outputFile(&quot;Zahlen.dat&quot;, ios::trunc); 
(ios::trunc makes the file empty). using .txt extension, so that it can be easily opened with a text editor.
        currentMemory=start; 
        while(currentMemory!=0) 
        {
            outputFile &lt;&lt; (currentMemory-&gt;value) &lt;&lt; endl;
            currentMemory = currentMemory-&gt;next;
        }
    }
    getch();
}
</code></pre>
<p>mfg<br />
martin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/211026/frage-zu-folgendem-code-zeiger-richtig-positionieren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 21:53:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/211026.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Apr 2008 20:31:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu folgendem Code - Zeiger richtig positionieren on Fri, 18 Apr 2008 16:09:27 GMT]]></title><description><![CDATA[<p>Hi Leuts,<br />
hab mir ein Programm, mit dem man beliebig viele Zahlen eingeben kann und anschließend wieder ausgeben. Beim Beenden werden die Zahlen gespeichert und beim erneuten wieder eingelesen. Nun möchte ich es so ändern, das man die Liste beim erneuten Einlesen der alten Zahlen erweitern kann. Jedoch speichert es mir immer nur die aktuellen Zahlen - die alten gehen irgendwie verloren?</p>
<p>Wie muss ich das umschreiben?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;conio.h&gt;
#include &lt;fstream&gt;

using namespace std;

int main()
{
    struct Memory
    {
        float value; 
        Memory* next;
    };

    Memory* currentMemory;

    Memory* lastMemory=0;
    Memory* start=0;

    ifstream inputFile(&quot;Zahlen.dat&quot;); 
    istream* inputStream; 
    if(inputFile)
    {
        cout &lt;&lt; &quot;File has been found - using it as input&quot; &lt;&lt; endl;
        inputStream=&amp;inputFile;
        inputStream=&amp;cin;
    }
    else
    {
        cout &lt;&lt; &quot;No file has been found - please enter some numbers, end with 0&quot; &lt;&lt; endl;
        inputStream=&amp;cin;
    }

    while(true)
    {
        cout &lt;&lt; &quot;Input : &quot;;

        float value=0; 
        (*inputStream) &gt;&gt; value;

        if(value==0)
        {
            break;
        }

        currentMemory=start; 
        while(currentMemory!=0
        {
            if(currentMemory-&gt;value==value)
            {
                break;
            }

            currentMemory = currentMemory-&gt;next;
        }

        if(currentMemory==0) 
        {
            currentMemory=new Memory;
            if(start==0)
            {
                start=currentMemory;
            }
            if(lastMemory!=0)
            {
                lastMemory-&gt;next=currentMemory;
            }

            currentMemory-&gt;value=value;
            currentMemory-&gt;next=0; 

            lastMemory=currentMemory;
        }
        else
        {
            cout &lt;&lt; &quot;The number &quot; &lt;&lt; value &lt;&lt; &quot; has already been in the list - skipping it&quot; &lt;&lt; endl;
        }
    }
    cout &lt;&lt; endl &lt;&lt; endl &lt;&lt; &quot;Output :&quot; &lt;&lt; endl &lt;&lt; endl ;
    currentMemory=start; 
    while(currentMemory!=0) 
    {
        cout &lt;&lt; (currentMemory-&gt;value) &lt;&lt; endl;
        currentMemory = currentMemory-&gt;next;
    }

    cout &lt;&lt; &quot;Saving the list to a file&quot; &lt;&lt; endl;
    {  
	    ofstream outputFile(&quot;Zahlen.dat&quot;, ios::trunc); 
(ios::trunc makes the file empty). using .txt extension, so that it can be easily opened with a text editor.
        currentMemory=start; 
        while(currentMemory!=0) 
        {
            outputFile &lt;&lt; (currentMemory-&gt;value) &lt;&lt; endl;
            currentMemory = currentMemory-&gt;next;
        }
    }
    getch();
}
</code></pre>
<p>mfg<br />
martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493887</guid><dc:creator><![CDATA[Metler]]></dc:creator><pubDate>Fri, 18 Apr 2008 16:09:27 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu folgendem Code - Zeiger richtig positionieren on Thu, 17 Apr 2008 20:38:17 GMT]]></title><description><![CDATA[<p>Abgesehen davon, dass das so gar nicht funktionieren kann und du den Speicher nicht mehr freigibst, solltest du, wenn du die Standardbibliothek nutzt, auch den Rest (std::list usw) nutzen.</p>
<p>Aber egal. Wenn du doch die Zahlen einliest, kannst du die doch auf die gleiche weise abspeicher, wie die anderen Zahlen, die du vom User einliest. Dann liest du die so ein und behandelst die dann einfach, alsob die der User eingegeben hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493890</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 17 Apr 2008 20:38:17 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu folgendem Code - Zeiger richtig positionieren on Thu, 17 Apr 2008 20:44:02 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Verstehe ich das richtig: Du hast eine verkettete liste mit zahlen. Jedoch setzt du jedes mal :</p>
<p>currentMemory=start;</p>
<p>Folglich fängst du im input immer bei position 0 an und überschreibst die liste?</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493892</guid><dc:creator><![CDATA[Bloop]]></dc:creator><pubDate>Thu, 17 Apr 2008 20:44:02 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu folgendem Code - Zeiger richtig positionieren on Thu, 17 Apr 2008 21:47:49 GMT]]></title><description><![CDATA[<p>Das scheint das Problem zu sein, Bloop. Ne Idee, wie ichs abändern könnte?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493905</guid><dc:creator><![CDATA[Metler]]></dc:creator><pubDate>Thu, 17 Apr 2008 21:47:49 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu folgendem Code - Zeiger richtig positionieren on Sat, 19 Apr 2008 11:39:42 GMT]]></title><description><![CDATA[<p>Hmm, scheint wirklich knifflig zu sein. Das schaff ich nie, wenns hier schon keiner zu Wissen scheint. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1494560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494560</guid><dc:creator><![CDATA[Metler]]></dc:creator><pubDate>Sat, 19 Apr 2008 11:39:42 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu folgendem Code - Zeiger richtig positionieren on Sat, 19 Apr 2008 12:05:00 GMT]]></title><description><![CDATA[<p>Metler schrieb:</p>
<blockquote>
<p>Hmm, scheint wirklich knifflig zu sein. Das schaff ich nie, wenns hier schon keiner zu Wissen scheint. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Hmm. Es hat nicht jeder Lust deinen unstrukturierten Ansatz zu verstehen zu versuchen.<br />
Wie wäre es mit einer Klasse, mit der du deine Liste verwaltest? Und die Liste von der Ein/Ausgabe trennst? Das würde die Sache enorm vereinfachen und man hätte auch einen besseren Überblick, was du eigentlich gedenkst zu tun.<br />
Im übrigen hat Bloop ja einen Hinweis gegeben. Das Problem gäbe es nicht, wenn du eine anständige Klasse geschrieben hättest, anstatt einfach mal drauflos zu schreiben.</p>
<p>Am besten du lässt einfach mal die Ein/Ausgabe weg und konzentrierst dich darauf eine Klasse zu schreiben, die einfache Funktionen, wie ein Element anfügen oder eines löschen anbietet. Dann kommst du gar nicht auf solche Probleme, die lediglich mit der Struktur deines Programmes zu tun haben.</p>
<p>Wenn du dann deine Liste hast, kannst du das ganz einfach machen. (Pseudocode)</p>
<pre><code>MyList list; //Liste erzeugen

int val;
while (ifstream &gt;&gt; val) // aus der Datei lesen und in val speichern
     list.push_back (val); //und jetzt in die Liste einfügen

while (istream &gt;&gt; val) //jetzt die usereingaben abwarten
     list.push_back (val); //und wieder speichern

//Ausgeben

//Speichern
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1494569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494569</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 19 Apr 2008 12:05:00 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu folgendem Code - Zeiger richtig positionieren on Sat, 19 Apr 2008 12:21:43 GMT]]></title><description><![CDATA[<p>Geheimtipp: Verwende einen Debugger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1494574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494574</guid><dc:creator><![CDATA[Achtung mal wieder]]></dc:creator><pubDate>Sat, 19 Apr 2008 12:21:43 GMT</pubDate></item></channel></rss>