<?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[schleife endet nicht]]></title><description><![CDATA[<p>ich bekomme die Schleife nicht so weit das sie sich erfolgreich endet, sie wenn einen fehler ausgibt also nicht mehr findet<br />
bool cgi::output()<br />
{</p>
<p>if (anfrage())<br />
{</p>
<p>input cgiinput;</p>
<p>do<br />
{<br />
f_start = query.find(&quot;+&quot;, start);</p>
<p>f_start += 1;</p>
<p>v_start = query.find(&quot;=&quot;, f_start);</p>
<p>f_end = v_start;</p>
<p>f_end -= 1;</p>
<p>v_start += 1;</p>
<p>f_size = f_end - f_start;</p>
<p>v_end = query.find(&quot;+&quot;,f_start);<br />
v_end -= 1;<br />
v_size = v_end - v_start;</p>
<p>cgiinput.formname += query.substr(f_start, f_size);<br />
cgiinput.value += query.substr(v_start, v_size);<br />
start += v_end;<br />
}</p>
<p>while(v_end == string::npos);</p>
<p>cout &lt;&lt; cgiinput.formname &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt;&quot; &lt;&lt; endl;<br />
cout &lt;&lt; cgiinput.value &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt;&quot; &lt;&lt; endl;</p>
<p>return true;<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/195758/schleife-endet-nicht</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 05:47:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/195758.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 21 Oct 2007 16:59:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to schleife endet nicht on Sun, 21 Oct 2007 16:59:02 GMT]]></title><description><![CDATA[<p>ich bekomme die Schleife nicht so weit das sie sich erfolgreich endet, sie wenn einen fehler ausgibt also nicht mehr findet<br />
bool cgi::output()<br />
{</p>
<p>if (anfrage())<br />
{</p>
<p>input cgiinput;</p>
<p>do<br />
{<br />
f_start = query.find(&quot;+&quot;, start);</p>
<p>f_start += 1;</p>
<p>v_start = query.find(&quot;=&quot;, f_start);</p>
<p>f_end = v_start;</p>
<p>f_end -= 1;</p>
<p>v_start += 1;</p>
<p>f_size = f_end - f_start;</p>
<p>v_end = query.find(&quot;+&quot;,f_start);<br />
v_end -= 1;<br />
v_size = v_end - v_start;</p>
<p>cgiinput.formname += query.substr(f_start, f_size);<br />
cgiinput.value += query.substr(v_start, v_size);<br />
start += v_end;<br />
}</p>
<p>while(v_end == string::npos);</p>
<p>cout &lt;&lt; cgiinput.formname &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt;&quot; &lt;&lt; endl;<br />
cout &lt;&lt; cgiinput.value &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt;&quot; &lt;&lt; endl;</p>
<p>return true;<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1389434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1389434</guid><dc:creator><![CDATA[Tuxist]]></dc:creator><pubDate>Sun, 21 Oct 2007 16:59:02 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Sun, 21 Oct 2007 17:14:29 GMT]]></title><description><![CDATA[<p>Der Code wäre angenehmer zu lesen, wenn du ihn in</p>
<pre><code class="language-cpp">und
</code></pre>
<p>-Tags einschließen würdest..<br />
Zu deiner &quot;Frage&quot;:<br />
v_end==string::npos dürfte eigentlich nie wahr werden, da v_end ja string::find - 1 ist, im Fall des Nicht-Findens also npos-1.. Hast du evtl noch ein paar mehr Infos? Bist du schon mit dem Debugger durchgegangen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1389441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1389441</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 21 Oct 2007 17:14:29 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Sun, 21 Oct 2007 18:12:40 GMT]]></title><description><![CDATA[<p>stimmt danke, aber wenn ich zb vsize bricht die schleife zu früh ab</p>
<pre><code class="language-cpp">bool cgi::output() 
{ 

if (anfrage()) 
{

input cgiinput;

do
{
f_start = query.find(&quot;?&quot;, start);

if (f_start == string::npos)
{
f_start = query.find(&quot;&amp;&quot;, start);
};

f_start += 2;
f_end = query.find(&quot;=&quot;, f_start);
f_end -=1;

f_size = f_end - f_start;

v_start = query.find(&quot;=&quot;, f_start);
v_start += 1;

v_end = query.find(&quot;&amp;&quot;,f_start);

if(v_end == string::npos)
{
v_end = query.find_last_of(v_start);
};

v_size = v_end - v_start;

cgiinput.formname +=(query.substr(f_start, f_size));
cgiinput.value += (query.substr(v_start, v_size));
start += f_start;
}

while( v_size == string::npos);

cout &lt;&lt; cgiinput.formname &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt;&quot; &lt;&lt; endl;
cout &lt;&lt; cgiinput.value &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt;&quot; &lt;&lt; endl;

return true;
}

else 
return false; 
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1389486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1389486</guid><dc:creator><![CDATA[Tuxist]]></dc:creator><pubDate>Sun, 21 Oct 2007 18:12:40 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Sun, 21 Oct 2007 18:33:37 GMT]]></title><description><![CDATA[<p>Warum machst du es nicht leser-freundlich:</p>
<pre><code class="language-cpp">bool found = false;
do
{
    ... = query.find( ... );
    if ( ... == string::npos )
        found = true;
} while ( ! found );
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1389507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1389507</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 21 Oct 2007 18:33:37 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Sun, 21 Oct 2007 20:02:24 GMT]]></title><description><![CDATA[<p>habe es versucht leser freundlicher zu gestallten leider funzt es immer noch nicht, schleife scheint endlos weiter zu laufen program läuft nicht weiter:</p>
<pre><code class="language-cpp">if (anfrage()) 
{

input cgiinput;

cgiformat = false; 

do
{

	f_start = query.find(&quot;?&quot;, start);

		if (f_start == string::npos)
		{
			f_start = query.find(&quot;&amp;&quot;, start);
		}

	f_start += 2;

	f_end = query.find(&quot;=&quot;, f_start);
	f_size = f_end - f_start;

	v_start = query.find(&quot;=&quot;, f_start);
	v_start += 1;
	v_end = query.find(&quot;&amp;&quot;,f_start);

		if(v_end == string::npos)
		{
		v_end = query.length();
		cgiformat = true;
		}

	v_size = v_end - v_start;

	cgiinput.formname +=(query.substr(f_start, f_size));
	cgiinput.value += (query.substr(v_start, v_size));
	start += f_start;

}

while( cgiformat == true );

	cout &lt;&lt; cgiinput.formname &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt;&quot; &lt;&lt; endl;
	cout &lt;&lt; cgiinput.value &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt;&quot; &lt;&lt; endl;

return true;
}

else 
return false; 
};
</code></pre>
<p>header</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;

using namespace std; 

class cgi 
{
private:
string::size_type start;

string::size_type f_start;
string::size_type f_end;
string::size_type f_size;

string::size_type v_start;
string::size_type v_end;
string::size_type v_size;

bool cgiformat;

public: 
string query;
bool anfrage(); 
bool output();
};

struct input
{
string formname;
string value;
};

class htmlform
{
private:

public:
void starthtml(string sitename);
void endhtml();
void startform(string methodform, string name);
void endform();
void input( string submitlabel, string type);
void formselect(string formselectname, string formselectinput);
};

class htmllayer
{
private:

public:
void createlayer(string layerid);
void endlayer();
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1389591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1389591</guid><dc:creator><![CDATA[Tuxist]]></dc:creator><pubDate>Sun, 21 Oct 2007 20:02:24 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Sun, 21 Oct 2007 20:00:37 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">if (anfrage())
{
    // viel Code
}
else
    return false;

// =&gt;
if ( ! anfrage() )
    return false;

// viel Code
</code></pre>
<pre><code class="language-cpp">f_start = query.find(&quot;?&quot;, start);
if (f_start == string::npos)
    f_start = query.find(&quot;&amp;&quot;, start);
</code></pre>
<p>Ist fehleranträchtig, was ist, wenn auch kein &quot;&amp;&quot; gefunden wird?</p>
<p>3. Dein Einrück-Stil ist sehr unkonventionell <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>4. Was ist das denn?: <code>while( v_end == true );</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1389597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1389597</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 21 Oct 2007 20:00:37 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Sun, 21 Oct 2007 20:20:19 GMT]]></title><description><![CDATA[<p>programm endet debugger jetzt normal gibt ersten datensatz aus mehr aber auch nicht</p>
<p>source code<br />
<a href="http://rs177tl2.rapidshare.com/files/64210338/tuxhtml.tar.gz" rel="nofollow">http://rs177tl2.rapidshare.com/files/64210338/tuxhtml.tar.gz</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1389615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1389615</guid><dc:creator><![CDATA[Tuxist]]></dc:creator><pubDate>Sun, 21 Oct 2007 20:20:19 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Sun, 21 Oct 2007 21:47:57 GMT]]></title><description><![CDATA[<p>Was soll der Code überhaupt machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1389664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1389664</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 21 Oct 2007 21:47:57 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Mon, 22 Oct 2007 15:19:22 GMT]]></title><description><![CDATA[<p>cgi ausgabe formatieren und die daten in einem struct speichern damit ich sie im program nacher weiterverarbeiten kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390053</guid><dc:creator><![CDATA[Tuxist]]></dc:creator><pubDate>Mon, 22 Oct 2007 15:19:22 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Tue, 23 Oct 2007 07:44:11 GMT]]></title><description><![CDATA[<p>Beziehe mich auf Tuxists Beitrag vom 21.10.2007 21:56:58<br />
Klassische Endlosschleife in Zeile 37</p>
<pre><code class="language-cpp">while( cgiformat == true );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1390344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390344</guid><dc:creator><![CDATA[Kenner der Schleifen]]></dc:creator><pubDate>Tue, 23 Oct 2007 07:44:11 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Tue, 23 Oct 2007 07:53:54 GMT]]></title><description><![CDATA[<p>Kenner der Schleifen schrieb:</p>
<blockquote>
<p>Beziehe mich auf Tuxists Beitrag vom 21.10.2007 21:56:58<br />
Klassische Endlosschleife in Zeile 37</p>
<pre><code class="language-cpp">while( cgiformat == true );
</code></pre>
</blockquote>
<p>Hast du überhaupt den kompletten Quelltext gelesen? Das ist der Abschluß einer recht umfangreichen do-while-Schleife (und im Inneren der Schleife wird cgiformat auch gesetzt) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15055">@tuxist</a>: Schonmal das Programm durch den Debugger gejagt? Auf Anhieb fällt mir nur auf, daß dein Abbruchkriterium verkehrt herum gesetzt ist - die Schleife läuft weiter, wenn die angegebene Bedingung erfüllt ist - und dank der Initialisierung mit 'cgiinput=false' ist das schon nach dem ersten Durchlauf nicht der Fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390350</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 23 Oct 2007 07:53:54 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Tue, 23 Oct 2007 08:13:54 GMT]]></title><description><![CDATA[<p>Bei einer solchen Formatierung ist es kein Wunder, dass man die Übersicht verliert. Es sah beim überfliegen aus, als wär es eine while-Schleife</p>
<pre><code class="language-cpp">do
{
//viele Zeilen
//zum überfliegen
}

while(...);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1390368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390368</guid><dc:creator><![CDATA[Kenner der Schleifen]]></dc:creator><pubDate>Tue, 23 Oct 2007 08:13:54 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Tue, 23 Oct 2007 18:33:05 GMT]]></title><description><![CDATA[<p>der fehler scheint hir zu liegen:</p>
<pre><code class="language-cpp">f_start = query.find(&quot;?&quot;, start);

		if (f_start == string::npos)
		{
			f_start = query.find(&quot;&amp;&quot;, start);

		}
	else
	cgiformat = true; //wenn ich dieses weg lasse endet die schleife endloss
</code></pre>
<p>dieses scheint nie true zu werden, müsste doch aber eigentlich wenn er kein ? finder oder habe ich hier einen logic fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390762</guid><dc:creator><![CDATA[Tuxist]]></dc:creator><pubDate>Tue, 23 Oct 2007 18:33:05 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Tue, 23 Oct 2007 19:18:58 GMT]]></title><description><![CDATA[<p>Ich habe mal angefangen, deinen Code aufzuräumen... (ich hatte Langeweile).<br />
Da ist mir eine entscheidene Frage in den Sinn gekommen, die mich zu dem Schluss bringen, dass du die gesamte Funktion/Methode mal überdenken solltest (siehe Kommentare).</p>
<pre><code class="language-cpp">bool cgi::output()
	{
		if( !anfrage() ) return false;
			// Bedingung umgekehrt hierdurch wird die Methode direkt
			//	mit false verlassen, wenn die Abfrage nicht
			//	erfolgreich war. Folge: Code wird übersichtlicher.

		input cgiinput;

		do {

			// Sucht die erste Zeichenkette, welche auf &quot;?&quot; passt
			//	(ab start): Die Position in f_start
			f_start = query.find(&quot;?&quot;, start);

			// Kann die Zeichenkette nicht gefunden werden, so wird
			//	nach der Zeichenkette &quot;&amp;&quot; gesucht.
			if (f_start == string::npos) {
				f_start = query.find(&quot;&amp;&quot;, start);
			};
			// ** Anmerkung 1: **
			// Hier erfolgt jedoch keine Prüfung mehr, ob ein &quot;&amp;&quot;
			//	auch tatsächlich gefunden wurde. Ist das so
			//	gewünscht?

			f_start += 2;
			// f_start soll wohl hier auf den Anfang der
			//	GET-Variable gesetzt werden, ob f_start den
			//  richtigen Wert aufweist (Anmerkung 1) ist fraglich.

			// Auf das Prüfen einer GET-Variable schließe ich,
			//	da die Zeichen ? und &amp; geprüft werden sollen.
			f_end = query.find(&quot;=&quot;, f_start);
			f_end -=1;

			f_size = f_end - f_start;

			v_start = query.find(&quot;=&quot;, f_start);
			v_start += 1;

			v_end = query.find(&quot;&amp;&quot;,f_start);

			if(v_end == string::npos) {
				v_end = query.find_last_of(v_start);
			};

			v_size = v_end - v_start;

			cgiinput.formname +=(query.substr(f_start, f_size));
			cgiinput.value += (query.substr(v_start, v_size));
			start += f_start;

		} while( v_size == string::npos);

		cout &lt;&lt; cgiinput.formname &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt;&quot; &lt;&lt; endl;
		cout &lt;&lt; cgiinput.value &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt;&quot; &lt;&lt; endl;

		return true;

	}
</code></pre>
<p>Korrigiere mich, wenn ich falsch liegen sollte.</p>
<p>Grüße...</p>
<p>Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390802</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Tue, 23 Oct 2007 19:18:58 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Tue, 23 Oct 2007 19:38:11 GMT]]></title><description><![CDATA[<p>Ich sehe ja ein das die Schleife unübersichtlich ist, aber ein anderer Lösungsweg ist mir nicht eingefallen und den query string in ein struct zu bekommen mit allen in dem query string enthaltenen werten.</p>
<p>dar ich formname und value getrennt in dem struct haben möchte.</p>
<p>Das problem ist mehrere query werte in das struct zu bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390822</guid><dc:creator><![CDATA[Tuxist]]></dc:creator><pubDate>Tue, 23 Oct 2007 19:38:11 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Tue, 23 Oct 2007 20:36:09 GMT]]></title><description><![CDATA[<p>habe noch versucht auf anmerkung eins enzugehen, leider ohne erfolg</p>
<pre><code class="language-cpp">if( !anfrage() ) return false; 
{

	input cgiinput; // struct wird initalisiert

	cgiformat = false; //bool wert wird gesetzt
	start = 1;

do { 

             // Sucht die erste Zeichenkette, welche auf &quot;?&quot; passt 
             //    (ab start): Die Position in f_start 
	     if(start == 1)
		{
		f_start = query.find(&quot;?&quot;);
		}
             // Kann die Zeichenkette nicht gefunden werden, so wird 
             //    nach der Zeichenkette &quot;&amp;&quot; gesucht. 
             else 
		{

		f_start = query.find(&quot;&amp;&quot;, start);

		if(f_start == string::npos)
		{
		cout &lt;&lt; &quot;error&quot; &lt;&lt; endl;
		break;
		}

		};

             // ** Anmerkung 1: ** 
             // Hier erfolgt jedoch keine Prüfung mehr, ob ein &quot;&amp;&quot; 
             //    auch tatsächlich gefunden wurde. Ist das so 
             //    gewünscht? 
		cout &lt;&lt; start &lt;&lt; endl;
		cout &lt;&lt; f_start &lt;&lt; endl;
             f_start += 2;
             // f_start soll wohl hier auf den Anfang der 
             //    GET-Variable gesetzt werden, ob f_start den 
             //  richtigen Wert aufweist (Anmerkung 1) ist fraglich. 

             // Auf das Prüfen einer GET-Variable schließe ich, 
             //    da die Zeichen ? und &amp; geprüft werden sollen. 
             f_end = query.find(&quot;=&quot;, f_start); 
             f_end -=1; 

             f_size = f_end - f_start; 

             v_start = query.find(&quot;=&quot;, f_start); 
             v_start += 1; 

             v_end = query.find(&quot;&amp;&quot;,f_start); 

             if(v_end == string::npos) { 
                 v_end = query.find_last_of(v_start);
		 cgiformat = true;
             }; 

             v_size = v_end - v_start;

             cgiinput.formname +=(query.substr(f_start, f_size)); 
             cgiinput.value += (query.substr(v_start, v_size)); 
             start += f_start;
	     cout &lt;&lt; start &lt;&lt; endl;

        } while( cgiformat == true);

         cout &lt;&lt; cgiinput.formname &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt;&quot; &lt;&lt; endl; 
         cout &lt;&lt; cgiinput.value &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt;&quot; &lt;&lt; endl; 

         return true; 

     } 

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1390871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390871</guid><dc:creator><![CDATA[Tuxist]]></dc:creator><pubDate>Tue, 23 Oct 2007 20:36:09 GMT</pubDate></item><item><title><![CDATA[Reply to schleife endet nicht on Tue, 23 Oct 2007 20:50:47 GMT]]></title><description><![CDATA[<p>Ich gehe mal weiterhin davon aus, dass du einen HTTP-Request auswerten willst.</p>
<p>Ein minimal HTTP-Request sieht wie folgt aus:</p>
<pre><code>GET /foobar.cgi?varname1=varvalue1&amp;foo=bar&amp;bar=fuzzy&amp;lonely HTTP/1.1
Host: www.dubhost.nop
</code></pre>
<p>Du solltest das Auswerten dieser Zeichenkette nicht in der Klasse vornehmen, sondern dafür einfach eine Funktion schreiben, welche die einzelnen Variablen in einem Container (std::map ist sinnvoll) zurück gibt (so kann man diese auch später für weitere CGI-Programme verwenden).</p>
<p>(Dadurch, dass du einfache <em>&quot;Arbeitsvariablen&quot;</em> als Klassenmember definierst hast du schon fast so etwas wie globale Variablen nur eben auf Klassenebene. Das ist sicherlich kein Vorteil für die Übersichtlichkeit.)</p>
<p>Arbeitsschritte:</p>
<p>1. Herauslösen der Zeichenkette <em>/foobar.cgi?varname1=varvalue1&amp;foo=bar&amp;bar=fuzzy&amp;lonely</em> aus dem Request<br />
(Tipp: Leerzeichen!)</p>
<p>2. Herauslösen der Zeichenkette, welche die Variablen enthält (<em>varname1=varvalue1&amp;foo=bar&amp;bar=fuzzy&amp;lonely</em>)</p>
<p>3. Aufteilen der Zeichenkette in die einzelnen Variablen:<br />
<em>varname1=varvalue1 .. foo=bar .. bar=fuzzy .. lonely</em><br />
(Tipp: std::vector zum zwischenspeichern)</p>
<p>4. Jeden einzelnen Eintrag im std::vector nochmals in ein Zeichenkettenpaar (Variablenname, Inhalt) aufteilen (Achtung: Es muss kein Inhalt und damit kein '=' vorhanden sein!) und dieses Paar dann in der std::map ablegen.</p>
<p>5. Kopie der std::map zurückgegeben.</p>
<p>Hinweis: Jeden dieser Arbeitsschritte sollte man in einer eigenen Funktion definieren und lediglich diese Aufrufen (macht die Sache wieder übersichtlicher).</p>
<p>Worauf du in Zukunft achten solltest ist vor allem, dass du deinen Code sinnvoll einrückst, Lesbarkeit und Übersichtlichkeit ist das Wichtigste! [1]</p>
<p>Kommentiere deinen Code. Ein verhältnis von 2:1 Kommentar zu Code ist schon ganz brauchbar. Kommentiere nicht die einzelnen Zeilen, sondern im Vorfeld, was ein gewisser Codeabschnitt leisten <strong>soll</strong> (bevor du den Code geschrieben hast). Schreibe auch mögliche Fehlerursachen auf. Das hilft, die Gedanke im Kopf zu sortieren und Fehler meistens schon zu finden, bevor du eine Zeile Code geschrieben hast.</p>
<p>Refaktorisiere: Wird eine Funktion zu groß (und damit unübersichtlich) teile diese in mehrere Funktionen auf. Das hat den Vorteil, dass du diese Funktionen später einzelnen Testen kannst.</p>
<p>Versuche jetzt aber bitte nicht, deinen vorhandenen Code zu entrümpeln. Ich empfehle eine Warmsanierung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Grüße...</p>
<p>Heiko<br />
---<br />
[1]: Schau dir mal die Codebeispiele hier im Forum an, wie diese formatiert sind. Du bist zwar im Grunde frei in der Entscheidung, wie du deinen Code formatierst, aber an gewisse Regeln sollte man sich halten damit andere den Code auch lesen können <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>(Ja, das ist zu lang für eine Fußnote...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390876</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Tue, 23 Oct 2007 20:50:47 GMT</pubDate></item></channel></rss>