<?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[Hilfe bei Brainfuck Interpreter]]></title><description><![CDATA[<p>Hi,<br />
ich bin gerade dabei aus langeweile einen Brainfuck Interpreter zu schreiben.<br />
Ich habe alle Befehle drinne nur die Schleife funktioniert nicht ganz korrekt.<br />
Sie klappt, aber bei Verschachtelungen streikt sie. Vielleicht hat jemand eine Idee, wie man das besser lösen könnte oder wo bei mir der (Denk)-Fehler liegt.</p>
<pre><code class="language-cpp">// [...]
case '[':
{
	std::string strTemp;
	m_LoopDepth++;
	i++;

	while ( true )
	{
		i++;

		if ( strLine[i] == '[' )
			m_LoopDepth++;

		if ( strLine[i] == ']' )
		{
			m_LoopDepth--;
		}

		if ( m_LoopDepth == 0 ) 
			break;
		else
			strTemp += strLine[i];
	}

	std::cout &lt;&lt; strTemp &lt;&lt; std::endl; // Debug

	while ( *m_VecMemoryIt )
	{
		Interpret( strTemp ); // Rekursion
	}
}
break;
// [...]
</code></pre>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/175543/hilfe-bei-brainfuck-interpreter</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 01:47:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/175543.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Mar 2007 19:32:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Hilfe bei Brainfuck Interpreter on Sun, 11 Mar 2007 19:32:36 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich bin gerade dabei aus langeweile einen Brainfuck Interpreter zu schreiben.<br />
Ich habe alle Befehle drinne nur die Schleife funktioniert nicht ganz korrekt.<br />
Sie klappt, aber bei Verschachtelungen streikt sie. Vielleicht hat jemand eine Idee, wie man das besser lösen könnte oder wo bei mir der (Denk)-Fehler liegt.</p>
<pre><code class="language-cpp">// [...]
case '[':
{
	std::string strTemp;
	m_LoopDepth++;
	i++;

	while ( true )
	{
		i++;

		if ( strLine[i] == '[' )
			m_LoopDepth++;

		if ( strLine[i] == ']' )
		{
			m_LoopDepth--;
		}

		if ( m_LoopDepth == 0 ) 
			break;
		else
			strTemp += strLine[i];
	}

	std::cout &lt;&lt; strTemp &lt;&lt; std::endl; // Debug

	while ( *m_VecMemoryIt )
	{
		Interpret( strTemp ); // Rekursion
	}
}
break;
// [...]
</code></pre>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243583</guid><dc:creator><![CDATA[IchNooB!]]></dc:creator><pubDate>Sun, 11 Mar 2007 19:32:36 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe bei Brainfuck Interpreter on Sun, 11 Mar 2007 19:45:09 GMT]]></title><description><![CDATA[<p>Warum denn so umständlich?</p>
<p>Wenn ein [ kommt packst du die aktuelle &quot;Adresse&quot; oben auf den Stack, beim ] musst du dann entweder<br />
- mit pop() das ganze wieder runternehmen wenn die Schleife fertig ist<br />
oder<br />
- zur Adresse top()+1 springen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243588</guid><dc:creator><![CDATA[Entenwickler wieder da]]></dc:creator><pubDate>Sun, 11 Mar 2007 19:45:09 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe bei Brainfuck Interpreter on Sun, 11 Mar 2007 19:46:02 GMT]]></title><description><![CDATA[<p>Achja Danke für den Hinweis übrigens wollte meinen mal fertig programmieren nun hab ich es schnell gemacht <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243590</guid><dc:creator><![CDATA[Entenwickler wieder da]]></dc:creator><pubDate>Sun, 11 Mar 2007 19:46:02 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe bei Brainfuck Interpreter on Sun, 11 Mar 2007 20:04:09 GMT]]></title><description><![CDATA[<p>Hi,<br />
danke für die Erklärung, aber so ganz mit klar kommen tu ich nicht <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>
<p>Kannste das nicht mal in Code ausdrücken? Ich bin am Verzweifeln...</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243596</guid><dc:creator><![CDATA[IchNooB!]]></dc:creator><pubDate>Sun, 11 Mar 2007 20:04:09 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe bei Brainfuck Interpreter on Sun, 11 Mar 2007 20:31:47 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">stack&lt;size_t&gt; callstack; // eigentlich das falsche wort, naja...
// wenn [ gefunden:
callstack.push(aktuelleAdresse + 1);
// wenn ] gefunden:
if(aktuelleZelle == 0) {
    callstack.pop();
} else {
    setzeAdresse(callstack.top());
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1243611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243611</guid><dc:creator><![CDATA[Entenwickler wieder da]]></dc:creator><pubDate>Sun, 11 Mar 2007 20:31:47 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe bei Brainfuck Interpreter on Mon, 12 Mar 2007 01:04:22 GMT]]></title><description><![CDATA[<p>@IchNooB!:</p>
<p>In deinem ursprünglichen Code ist der 1. Fehler IMHO das &quot;case '['&quot; - das müsste &quot;case ']'&quot; heissen. Die [ kannst du eigentlich komplett ignorieren beim normalen Ausführen des Programmes, einzig wenn du auf ein ] triffst musst du das dazupassende [ suchen, und in der Zelle danach weitermachen.</p>
<p>Die Variante von &quot;Entenwickler&quot; ist aber sicher schneller.</p>
<p>----</p>
<p>Was mir zum Thema Brainfuck noch eingefallen ist: es wäre mal interessant nen &quot;schlauen&quot; Brainfuck Interpreter zu schreiben, der gewisse Patterns erkennen kann, und die dann optimiert ausführt. Sollte eigentlich nicht soooo wahnsinnig schwer sein, die Frage wäre wie weit man das treiben kann <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243714</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 12 Mar 2007 01:04:22 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe bei Brainfuck Interpreter on Tue, 13 Mar 2007 12:49:13 GMT]]></title><description><![CDATA[<p>Hi,<br />
erstmal danke für eure Antworten, aber so ganz weitergebracht hat mich das auch nicht. Einfache Schleifen ohne Verschachtelungen haben ja vorher auch schon funktioniert und es ging mir nun um richtige Verschachtelung und ich glaube der Code tut das nicht 100% richtig.</p>
<pre><code class="language-cpp">while ( true )
{
 while ( true ) // Er führt ja erst diese aus und dann die da rüber?
 {
    // ...
 }
}
</code></pre>
<p>Oder habe ich das falsch implentiert? Mit der <strong>+ 1</strong> gehts jedenfalls ganz schief!</p>
<pre><code class="language-cpp">case '[':
 LoopStack.push( m_nPosInFile );
 break;

case ']':
 if ( *MemoryIt != 0 )
 {
  m_nPosInFile = LoopStack.top();
 }
 else
 {
  LoopStack.pop();
 }
 break;
</code></pre>
<p>Vielleicht habt ihr ja auch einen Brainfuck-Code mit einer vernünftigen Verschachtelung zum Austesten.</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1244644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1244644</guid><dc:creator><![CDATA[IchNooB!]]></dc:creator><pubDate>Tue, 13 Mar 2007 12:49:13 GMT</pubDate></item></channel></rss>