<?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[[BCB 6] Bekomme Exception]]></title><description><![CDATA[<p>Folgendes Problem:</p>
<p>Ich habe ein TEdit (edi_display) das ich für einen Taschenrechner brauche.</p>
<p>Der Rechner besteht aus jenem TEdit und einem Button(btn_enter). Per btn_enterClick soll der Inhalt von TEdit ausgelesen, auf Rechenzeichen ( * ) inspiziert werden und dann die zahlen vor und hinter dem Rechenzeichen miteinander multipliziert werden.<br />
Ich erhalte aber immer eine Exception vom Debugger <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>
<pre><code class="language-cpp">//--------------------------------------------------------------------------
void __fastcall TRechner::btn_enterClick(TObject *Sender)
{
AnsiString sText = edi_display-&gt;Text;
for(int i=1; i&lt;=sText.Length(); i++)
{
  char c = sText[i];
   // Ersten Wert, der vor dem Operator im Editfeld steht einlesen

   if (c=='*')
   {
   AnsiString temp1;
   AnsiString temp2;

        for (int a = 1; a &lt; i ; a++)
                {
                temp1[a] = sText[a];
                }

        //Wert hinter dem Rechenzeichen einlesen

        for (int b = 1+i; b &lt; sText.Length(); b++)
                {
                temp2[b] = sText[b];
                }
     edi_display-&gt;Text = ((StrToInt(temp1)) * (StrToInt(temp2)));
   }

}
}
</code></pre>
<p>Lässt sich kompilieren und linken, aber bei einer Eingabe wie 3*3 erhalte ich eine Exception.</p>
<p>Nebenbei :</p>
<pre><code class="language-cpp">//...
edi_display-&gt;Text = ((StrToFloat(temp1)) * (StrToFloat(temp2)));
</code></pre>
<p>lässt sich nicht kompilieren :</p>
<pre><code>[C++ Error] Unit1.cpp(132): E2015 Ambiguity between '_fastcall System::AnsiString::AnsiString(char)' and '_fastcall System::AnsiString::AnsiString(short)'
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/195953/bcb-6-bekomme-exception</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 11:15:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/195953.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 23 Oct 2007 20:08:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [BCB 6] Bekomme Exception on Tue, 23 Oct 2007 20:32:31 GMT]]></title><description><![CDATA[<p>Folgendes Problem:</p>
<p>Ich habe ein TEdit (edi_display) das ich für einen Taschenrechner brauche.</p>
<p>Der Rechner besteht aus jenem TEdit und einem Button(btn_enter). Per btn_enterClick soll der Inhalt von TEdit ausgelesen, auf Rechenzeichen ( * ) inspiziert werden und dann die zahlen vor und hinter dem Rechenzeichen miteinander multipliziert werden.<br />
Ich erhalte aber immer eine Exception vom Debugger <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>
<pre><code class="language-cpp">//--------------------------------------------------------------------------
void __fastcall TRechner::btn_enterClick(TObject *Sender)
{
AnsiString sText = edi_display-&gt;Text;
for(int i=1; i&lt;=sText.Length(); i++)
{
  char c = sText[i];
   // Ersten Wert, der vor dem Operator im Editfeld steht einlesen

   if (c=='*')
   {
   AnsiString temp1;
   AnsiString temp2;

        for (int a = 1; a &lt; i ; a++)
                {
                temp1[a] = sText[a];
                }

        //Wert hinter dem Rechenzeichen einlesen

        for (int b = 1+i; b &lt; sText.Length(); b++)
                {
                temp2[b] = sText[b];
                }
     edi_display-&gt;Text = ((StrToInt(temp1)) * (StrToInt(temp2)));
   }

}
}
</code></pre>
<p>Lässt sich kompilieren und linken, aber bei einer Eingabe wie 3*3 erhalte ich eine Exception.</p>
<p>Nebenbei :</p>
<pre><code class="language-cpp">//...
edi_display-&gt;Text = ((StrToFloat(temp1)) * (StrToFloat(temp2)));
</code></pre>
<p>lässt sich nicht kompilieren :</p>
<pre><code>[C++ Error] Unit1.cpp(132): E2015 Ambiguity between '_fastcall System::AnsiString::AnsiString(char)' and '_fastcall System::AnsiString::AnsiString(short)'
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1390855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390855</guid><dc:creator><![CDATA[mulo]]></dc:creator><pubDate>Tue, 23 Oct 2007 20:32:31 GMT</pubDate></item><item><title><![CDATA[Reply to [BCB 6] Bekomme Exception on Tue, 23 Oct 2007 21:05:20 GMT]]></title><description><![CDATA[<p>Versuche es mal so:</p>
<pre><code class="language-cpp">void __fastcall TForm1::btn_enterClick(TObject *Sender)
{
   AnsiString sText = edi_display-&gt;Text;
   AnsiString temp1, temp2;
   for(int i=1; i&lt;=sText.Length() - 1; i++) {
      if (sText[i] != '*') {
         temp1 += sText[i];
      }
      else {
         temp2 += sText[i + 1];
      }
   }
   edi_display-&gt;Text = IntToStr(StrToInt(temp1) * StrToInt(temp2));
}
</code></pre>
<p>Das -1 in der Zählschleife ist zum Überzählen des Multiplikationszeichens(*);),<br />
wie das i+1 in der Zeile 10.</p>
<p>Wenn du mal mit Nachkommawerten rechnen willst, empfiehlt sich aber doch evtl.<br />
ein Button für das Multiplikationszeichen.</p>
<p>MfG<br />
kpeter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390882</guid><dc:creator><![CDATA[kpeter]]></dc:creator><pubDate>Tue, 23 Oct 2007 21:05:20 GMT</pubDate></item><item><title><![CDATA[Reply to [BCB 6] Bekomme Exception on Wed, 24 Oct 2007 10:42:45 GMT]]></title><description><![CDATA[<p>Sorry, aber euer beider Code ist falsch:</p>
<p>mulo:</p>
<pre><code class="language-cpp">AnsiString templ, sText;

temp1[a] = sText[a];
</code></pre>
<p>Du kannst nicht einfach an einen bestimmten Index in einen leeren String etwas einfügen.<br />
Entweder du hängst die Zeichen immer hintendran:</p>
<pre><code class="language-cpp">temp1 += sText[a];
</code></pre>
<p>oder aber du benutzt am besten die Methode SubString:</p>
<pre><code class="language-cpp">temp1 = sText.SubString(1, i-1); // (Index, Anzahl)
</code></pre>
<p>Dadurch sparst du dir die Schleife.</p>
<p>kpeter:<br />
Deine Bedingung in der Schleife ist falsch, da beim Zeichen '*' nur einmal das nächste Zeichen nach temp2 geschrieben würde, alle nachfolgenden aber wieder in temp1.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391090</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Wed, 24 Oct 2007 10:42:45 GMT</pubDate></item><item><title><![CDATA[Reply to [BCB 6] Bekomme Exception on Wed, 24 Oct 2007 21:22:53 GMT]]></title><description><![CDATA[<p>Th schrieb:</p>
<blockquote>
<p>oder aber du benutzt am besten die Methode SubString:</p>
<pre><code class="language-cpp">temp1 = sText.SubString(1, i-1); // (Index, Anzahl)
</code></pre>
<p>Dadurch sparst du dir die Schleife.</p>
</blockquote>
<p>Könntest du mit das evtl in meine Code einbauen.. Ich kann da nichts mit anfangen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Gibts evtl. irgendwo etwas was mir den Umgang mit AnsiStrings erklärt und mir die einzelnen Methoden näherbringt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391536</guid><dc:creator><![CDATA[mulo]]></dc:creator><pubDate>Wed, 24 Oct 2007 21:22:53 GMT</pubDate></item><item><title><![CDATA[Reply to [BCB 6] Bekomme Exception on Wed, 24 Oct 2007 22:44:03 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>In der Builder-Hilfe steht alles wissenswerte zu AnsiString und seinen Methoden.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391560</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Wed, 24 Oct 2007 22:44:03 GMT</pubDate></item></channel></rss>