<?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[Problem beim Arbeiten mit Vektoren]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Funktion, die ein Textfile, das folgendermaßen aussieht, über einen Vektor auslesen soll.</p>
<pre><code>test.txt:
# Kommentare
#
#  a     b     c     d 
#
  12.34  56.78 54.32 43.23  on  

  32.45  98.65 65.43 43.26  off
</code></pre>
<p>Hier jetzt die Funktion, die die Werte in einen Vektor schreibt. In der main-Funktion soll man dann auf die einzelnen Elemente zugreifen können.</p>
<pre><code class="language-cpp">#include &lt;sstream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;
#include &lt;map&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
using namespace std;

bool findvalues(vector&lt;double&gt; &amp;v) {
    ifstream in(&quot;test.txt&quot;);
    if(in.is_open()) {
        string line;
        while(!in.eof()) {
            getline(in, line);
            if(!line.empty() &amp;&amp; line[0] != '#') {
                stringstream ss;
                string onoff;
                double a, b, c, d;
                ss &lt;&lt; line;
                ss &gt;&gt; a &gt;&gt; b &gt;&gt; c &gt;&gt; d &gt;&gt; onoff;
                if(onoff == &quot;on&quot;) {
                    v.push_back(a);
                    v.push_back(b);
                    v.push_back(c);
                    v.push_back(d);
                    return true;
                }
            }
        }
    }
    in.close();
    return false;
}

int main () {
        cout&lt;&lt;&quot;1&quot;&lt;&lt;endl;
    vector &lt;double&gt; v;
        cout&lt;&lt;&quot;2&quot;&lt;&lt;endl;
    findvalues(v);
        cout&lt;&lt;&quot;3&quot;&lt;&lt;endl;
    double q = v[1];
        cout&lt;&lt;&quot;4&quot;&lt;&lt;endl;
    cout&lt;&lt;q&lt;&lt;endl;
        cout&lt;&lt;&quot;5&quot;&lt;&lt;endl;
    return 0;
}
</code></pre>
<p>Wenn ich das Programm ausführe, erfolgt die Ausgabe bis einschließlich 3, danach steht &quot;Segmentation fault&quot;. Der Fehler muss also in der Zeile &quot;double q = v[1]&quot; liegen.</p>
<p>Könnt Ihr mir auf die Sprünge helfen, warum das Programm so nicht funktioniert?</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197846/problem-beim-arbeiten-mit-vektoren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 15:37:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197846.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 15 Nov 2007 13:02:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem beim Arbeiten mit Vektoren on Thu, 15 Nov 2007 13:02:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Funktion, die ein Textfile, das folgendermaßen aussieht, über einen Vektor auslesen soll.</p>
<pre><code>test.txt:
# Kommentare
#
#  a     b     c     d 
#
  12.34  56.78 54.32 43.23  on  

  32.45  98.65 65.43 43.26  off
</code></pre>
<p>Hier jetzt die Funktion, die die Werte in einen Vektor schreibt. In der main-Funktion soll man dann auf die einzelnen Elemente zugreifen können.</p>
<pre><code class="language-cpp">#include &lt;sstream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;
#include &lt;map&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
using namespace std;

bool findvalues(vector&lt;double&gt; &amp;v) {
    ifstream in(&quot;test.txt&quot;);
    if(in.is_open()) {
        string line;
        while(!in.eof()) {
            getline(in, line);
            if(!line.empty() &amp;&amp; line[0] != '#') {
                stringstream ss;
                string onoff;
                double a, b, c, d;
                ss &lt;&lt; line;
                ss &gt;&gt; a &gt;&gt; b &gt;&gt; c &gt;&gt; d &gt;&gt; onoff;
                if(onoff == &quot;on&quot;) {
                    v.push_back(a);
                    v.push_back(b);
                    v.push_back(c);
                    v.push_back(d);
                    return true;
                }
            }
        }
    }
    in.close();
    return false;
}

int main () {
        cout&lt;&lt;&quot;1&quot;&lt;&lt;endl;
    vector &lt;double&gt; v;
        cout&lt;&lt;&quot;2&quot;&lt;&lt;endl;
    findvalues(v);
        cout&lt;&lt;&quot;3&quot;&lt;&lt;endl;
    double q = v[1];
        cout&lt;&lt;&quot;4&quot;&lt;&lt;endl;
    cout&lt;&lt;q&lt;&lt;endl;
        cout&lt;&lt;&quot;5&quot;&lt;&lt;endl;
    return 0;
}
</code></pre>
<p>Wenn ich das Programm ausführe, erfolgt die Ausgabe bis einschließlich 3, danach steht &quot;Segmentation fault&quot;. Der Fehler muss also in der Zeile &quot;double q = v[1]&quot; liegen.</p>
<p>Könnt Ihr mir auf die Sprünge helfen, warum das Programm so nicht funktioniert?</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403632</guid><dc:creator><![CDATA[LadyM]]></dc:creator><pubDate>Thu, 15 Nov 2007 13:02:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Arbeiten mit Vektoren on Thu, 15 Nov 2007 13:07:15 GMT]]></title><description><![CDATA[<p>Bei mir funktioniert's.</p>
<p>Bist du sicher, dass du die richtige Datei einliest? Prüf doch mal nach dem Aufruf von findvalues, wieviele Elemente der vector hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403634</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 15 Nov 2007 13:07:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Arbeiten mit Vektoren on Thu, 15 Nov 2007 13:43:33 GMT]]></title><description><![CDATA[<p>Ja, also eigentlich hab ich nur diese eine Datei test.txt. Wenn ich die Anzahl der Elemente prüfe, gibt er mir allerdings 0 aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403660</guid><dc:creator><![CDATA[LadyM]]></dc:creator><pubDate>Thu, 15 Nov 2007 13:43:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Arbeiten mit Vektoren on Thu, 15 Nov 2007 13:57:04 GMT]]></title><description><![CDATA[<p>Und konnte diese Datei auch geöffnet werden? (schau mal nach, ob du überhaupt in den 'if(in.is_open())...' Zweig reingekommen bist)</p>
<p>(PS: Wenn du hast, solltest du einen Debugger verwenden)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403671</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 15 Nov 2007 13:57:04 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Arbeiten mit Vektoren on Thu, 15 Nov 2007 13:57:58 GMT]]></title><description><![CDATA[<p>Ok, hat sich erledigt. Ich hatte in der Datei bei einer Zahl ein Leerzeichen zuviel. Jetzt funktioniert es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403672</guid><dc:creator><![CDATA[LadyM]]></dc:creator><pubDate>Thu, 15 Nov 2007 13:57:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Arbeiten mit Vektoren on Thu, 15 Nov 2007 14:01:24 GMT]]></title><description><![CDATA[<p>Na dann hast du doch dein Problem. Geh mal mit dem Debugger durch und schau nach ob richtig eingelesen wird. Vor dem Ausgeben solltest du auch noch den Rückgabewert von findvalues auswerten.<br />
Ich würde findvalues noch ein wenig umformulieren.</p>
<pre><code class="language-cpp">bool findvalues(vector&lt;double&gt; &amp;v) 
{
    ifstream in(&quot;test.txt&quot;);
    if(!in.is_open()) return false;
    string line;
    while(getline(in, line)) 
    {
        if(!line.empty() &amp;&amp; line[0] != '#') 
        {
            stringstream ss(line);
            string onoff;
            double a, b, c, d;
            ss &gt;&gt; a &gt;&gt; b &gt;&gt; c &gt;&gt; d &gt;&gt; onoff;
            if(onoff == &quot;on&quot;) 
            {
                v.push_back(a);
                v.push_back(b);
                v.push_back(c);
                v.push_back(d);
                return true;
            }
        }
    }
    return false;
}
</code></pre>
<p>[edit]Ein wenig spät. <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="🙂"
    /> [edit]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403676</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 15 Nov 2007 14:01:24 GMT</pubDate></item></channel></rss>