<?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[Programmabbruch funktioniert nicht]]></title><description><![CDATA[<p>Hallo,</p>
<p>hab mal wieder eine Frage:</p>
<p>Ich habe eine Datei, in der jede Zeile folgendermaßen aufgebaut ist:<br />
key | value | comment</p>
<p>Ich möchte nun über eine map mit dem key auf den value zugreifen, was ich in folgender Funktion bereits realisiert habe:</p>
<pre><code class="language-cpp">bool read() {
    map&lt;string, double&gt; data;
    ifstream IN (&quot;test.txt&quot;);
    if (IN.is_open()) {
        string line;
        while (getline(IN, line)) {
            stringstream sstr;
            string pipe, key, comment;
            double value;
            sstr &lt;&lt; line;
            sstr &gt;&gt; key &gt;&gt; pipe &gt;&gt; value &gt;&gt; pipe &gt;&gt; comment;
            data[key] = value;
        }
        IN.close();
        return true;
    } else {
        cout&lt;&lt;&quot;ERROR opening test.txt\n&quot;;
        return false;
    }
}
</code></pre>
<p>Soweit funktioniert alles, aber es könnte ja sein, dass man sich bei dem key vertippt oder einen key eingibt, der gar nicht vorhanden ist. Dies soll abgefangen werden, d.h. es soll eine Fehlermeldung ausgegeben und das Programm abgebrochen werden.</p>
<p>Jetzt habe ich für die Zeile 12 folgendes eingefügt.</p>
<pre><code class="language-cpp">if (line.find(key) != string::npos) {
    data[key] = value;
} else {
    cerr &lt;&lt;&quot;# Invalid key! Program terminated!&quot;&lt;&lt;endl;
    exit(1);
}
</code></pre>
<p>So funktioniert es aber nicht. Wenn ich nun einen key eingebe, der nicht existiert, dann wird für den Wert 0 ausgegeben, aber das Programm läuft trotzdem normal weiter.</p>
<p>Was mach ich denn falsch? Könnt Ihr mir da weiterhelfen?</p>
<p>Vielen Dank schon mal!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/205837/programmabbruch-funktioniert-nicht</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 19:35:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/205837.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 18 Feb 2008 15:33:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programmabbruch funktioniert nicht on Mon, 18 Feb 2008 15:33:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>hab mal wieder eine Frage:</p>
<p>Ich habe eine Datei, in der jede Zeile folgendermaßen aufgebaut ist:<br />
key | value | comment</p>
<p>Ich möchte nun über eine map mit dem key auf den value zugreifen, was ich in folgender Funktion bereits realisiert habe:</p>
<pre><code class="language-cpp">bool read() {
    map&lt;string, double&gt; data;
    ifstream IN (&quot;test.txt&quot;);
    if (IN.is_open()) {
        string line;
        while (getline(IN, line)) {
            stringstream sstr;
            string pipe, key, comment;
            double value;
            sstr &lt;&lt; line;
            sstr &gt;&gt; key &gt;&gt; pipe &gt;&gt; value &gt;&gt; pipe &gt;&gt; comment;
            data[key] = value;
        }
        IN.close();
        return true;
    } else {
        cout&lt;&lt;&quot;ERROR opening test.txt\n&quot;;
        return false;
    }
}
</code></pre>
<p>Soweit funktioniert alles, aber es könnte ja sein, dass man sich bei dem key vertippt oder einen key eingibt, der gar nicht vorhanden ist. Dies soll abgefangen werden, d.h. es soll eine Fehlermeldung ausgegeben und das Programm abgebrochen werden.</p>
<p>Jetzt habe ich für die Zeile 12 folgendes eingefügt.</p>
<pre><code class="language-cpp">if (line.find(key) != string::npos) {
    data[key] = value;
} else {
    cerr &lt;&lt;&quot;# Invalid key! Program terminated!&quot;&lt;&lt;endl;
    exit(1);
}
</code></pre>
<p>So funktioniert es aber nicht. Wenn ich nun einen key eingebe, der nicht existiert, dann wird für den Wert 0 ausgegeben, aber das Programm läuft trotzdem normal weiter.</p>
<p>Was mach ich denn falsch? Könnt Ihr mir da weiterhelfen?</p>
<p>Vielen Dank schon mal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458264</guid><dc:creator><![CDATA[LadyM]]></dc:creator><pubDate>Mon, 18 Feb 2008 15:33:06 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabbruch funktioniert nicht on Mon, 18 Feb 2008 18:22:44 GMT]]></title><description><![CDATA[<p>Deine Abfrage &quot;line.find(key)&quot; ist ja ziemlich sinnlos, da du ja gerade vorher den &quot;key&quot; aus der Zeile &quot;line&quot; extrahierst hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458368</guid><dc:creator><![CDATA[~hä]]></dc:creator><pubDate>Mon, 18 Feb 2008 18:22:44 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabbruch funktioniert nicht on Mon, 18 Feb 2008 18:23:49 GMT]]></title><description><![CDATA[<p>Hmm da ist was nicht logisch ...</p>
<pre><code class="language-cpp">bool read() 
{
    std::ifstream file_stream(&quot;test.txt&quot;);
    if (!file_stream) return false;

    std::map&lt; std::string, double &gt; data;

    std::string bin;
    std::string key;
    std::string value;
    while (file_stream &gt;&gt; key &gt;&gt; bin &gt;&gt; value &gt;&gt; bin &gt;&gt; std::getline(file_stream, bin))
        data.insert(std::make_pair(key, value));
}
</code></pre>
<p>... soweit ließt er ein, okay ... aber data ist nach verlassen von read doch eh nicht mehr da?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458370</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 18 Feb 2008 18:23:49 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabbruch funktioniert nicht on Tue, 19 Feb 2008 07:17:47 GMT]]></title><description><![CDATA[<p>Ja, stimmt, das ist wirkich sinnlos so. Jetzt ist es mir auch aufgefallen.</p>
<p>Also mit data kann ich eigentlich schon arbeiten. Wie gesagt, es funktioniert alles bis auf diesen Programmabbruch.</p>
<p>Kann ich das nicht direkt abfragen? Brauch ich da eine extra Funktion, die das überprüft?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458574</guid><dc:creator><![CDATA[LadyM]]></dc:creator><pubDate>Tue, 19 Feb 2008 07:17:47 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabbruch funktioniert nicht on Tue, 19 Feb 2008 07:47:49 GMT]]></title><description><![CDATA[<p>Mach aus<br />
if (line.find(key) != string::npos) {<br />
einfach<br />
if (data.find(key) == data.end()) {</p>
<p>Das willst du doch testen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458585</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Tue, 19 Feb 2008 07:47:49 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabbruch funktioniert nicht on Tue, 19 Feb 2008 09:21:24 GMT]]></title><description><![CDATA[<p>Irgendwas mach ich wohl falsch... So funktioniert es auch nicht... Das Programm läuft ganz normal weiter, auch wenn der Key nicht vorhanden ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458633</guid><dc:creator><![CDATA[LadyM]]></dc:creator><pubDate>Tue, 19 Feb 2008 09:21:24 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabbruch funktioniert nicht on Tue, 19 Feb 2008 09:33:26 GMT]]></title><description><![CDATA[<p>Mit der Bedingung von Fellhuhn fügst Du den key in data ein, wenn er noch nicht existiert, und gibst eine Fehlermeldung aus, wenn er bereits existiert. Was möchtest Du denn sonst erreichen?</p>
<p>EDIT:<br />
Beim Einlesen von Keys aus einer Datei kann ein Key falschgeschrieben sein?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458640</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 19 Feb 2008 09:33:26 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabbruch funktioniert nicht on Tue, 19 Feb 2008 09:52:25 GMT]]></title><description><![CDATA[<p>Also folgendes:</p>
<p>Meine Datei, die eingelesen wird, sieht folgendermaßen aus:</p>
<pre><code>ABC | 1.2 | Kommentar
DEF | 3.4 | Kommentar
</code></pre>
<p>In der read-Funktion wird es so eingelesen, dass die map (data[key] = value) ja quasi so aussieht:<br />
data[&quot;ABC&quot;] = 1.2<br />
data[&quot;DEF&quot;] = 3.4</p>
<p>Jetzt wird die read-Funktion in meinem Programm aufgerufen und dann die Werte zugewiesen, z.B.</p>
<p>double test = data[&quot;ABC&quot;];</p>
<p>Und genau bei diesem Aufruf könnte ja sein, dass dort ein key steht, der gar nicht existiert, z.B. data[&quot;GHI&quot;]. Und genau in dem Fall soll das Programm dann abbrechen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458656</guid><dc:creator><![CDATA[LadyM]]></dc:creator><pubDate>Tue, 19 Feb 2008 09:52:25 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabbruch funktioniert nicht on Tue, 19 Feb 2008 10:07:07 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">if (data.find(&quot;KEY&quot;) == data.end()) { // Key existiert nicht
    ...
    /* Programmabbruch einleiten */
}
</code></pre>
<p>Aber gewiss nicht <strong>in</strong> der read-Funktion, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458677</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 19 Feb 2008 10:07:07 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabbruch funktioniert nicht on Tue, 19 Feb 2008 10:07:20 GMT]]></title><description><![CDATA[<p>if (data.find(&quot;ABC&quot;) == data.end()) {<br />
exit(1);<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458678</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Tue, 19 Feb 2008 10:07:20 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabbruch funktioniert nicht on Tue, 19 Feb 2008 14:42:53 GMT]]></title><description><![CDATA[<p>Ich habe die Problematik auch einmal aufgefasst und die Aussagen oben so gut es geht in einem lauffähigen Programm zusammen gefasst.</p>
<p>Folgende Anforderungen habe ich an das Programm gestellt:</p>
<p>* Die Abfrage des Schlüssel erfolgt <strong>nicht</strong> während des Einlesens<br />
* Die Abfragefunktion beendet nicht das Programm, wenn kein Schlüssel gefunden wurde.</p>
<p>In meinem Beispiel bricht das Programm nicht ab, sondern gibt eine Mitteilung aus, dass der Schlüssel nicht gefunden wurde.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;map&gt;
#include &lt;sstream&gt;
#include &lt;string&gt;

typedef std::pair&lt;size_t, double&gt; Result;
typedef std::map&lt;std::string, double&gt; Database;

void insertFromFile(const std::string&amp; filename, Database&amp;);
Result selectFromDB(const std::string&amp; key, const Database&amp;);

int main()
    {
        Database db;

        // ** Einlesen der Datenbank **
        try {
            insertFromFile(&quot;test.txt&quot;, db);
        }
        catch(std::string e) {
            std::cerr &lt;&lt; &quot;Fehler!\n &quot; &lt;&lt; e &lt;&lt; std::endl;
            return EXIT_FAILURE;
        }

        // ** Arbeiten mit der Datenbank **
        Result r1 = selectFromDB(&quot;pi&quot;, db);
        if(r1.first &gt; 0) {
            // Erwartetes Ergebnis:
            std::cout &lt;&lt; &quot;Pi ist &quot; &lt;&lt; r1.second &lt;&lt; std::endl;
        }

        Result r2 = selectFromDB(&quot;a03&quot;, db);
        if(r2.first == 0) {
            // Erwartetes Ergebnis:
            std::cout &lt;&lt; &quot;a03 konnte nicht gefunden werden&quot; &lt;&lt; std::endl;
        }

        return EXIT_SUCCESS;
    }

// ----------------------------------------------------------------------------

void insertFromFile(const std::string&amp; filename, Database&amp; d)
    {
        std::ifstream in(filename.c_str());
        if(!in.is_open()) throw std::string(&quot;Datei konnte nicht geoeffnet werden!&quot;);
            // std::string sollte eigentlich NICHT geworfen werden!

        std::string line;
        while(getline(in, line)) {
            std::stringstream ss(line);

            std::string key;
            char pipe;
            float value;

            ss &gt;&gt; key &gt;&gt; pipe &gt;&gt; value;
                // Der Rest der Zeile wird ohnehin verworfen
            d[key] = value;
        }
    }

// ----------------------------------------------------------------------------

Result selectFromDB(const std::string&amp; key, const Database&amp; d)
    {
        size_t count = d.count(key);
        double value = 0.0;
        if(count &gt; 0) value = d.find(key)-&gt;second;
        return std::make_pair(count, value);
    }
</code></pre>
<p>Die Datenbasis:</p>
<pre><code>a01 | 0.1234 | Kommentar beliebier Länge
a02 | 1.3345 | -
pi | 3.14157 | -
</code></pre>
<p>Ich hoffe, dass Beispiel ist einigermaßen verständlich, auch wenn es nicht sonderlich gut kommentiert ist.</p>
<p>Grüße... Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458911</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Tue, 19 Feb 2008 14:42:53 GMT</pubDate></item></channel></rss>