<?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[Denkfehler?? -&amp;gt; ignorieren von zeichen]]></title><description><![CDATA[<p>Hallo Leute<br />
ich sitze hier schon seit 4 Stunden daran um nur diese Problem zu finden (bis jetzt kein erfolg -.-)</p>
<pre><code class="language-cpp">#define NICHTS '#'
#define FUELLZEICHEN ' '
#define MAUER_HORIZONTAL '|'
#define MAUER_VERTIKAL '-'
#define KISTE_AUSSEHEN 'o'
#define MARKE_AUSSEHEN '~'
#define MARKE_AUSSEHEN_BELEGT 'O'
#define SPIELER_AUSSEHEN '*'

...
ifstream leseDatei(KARTE_DATEI,ios::binary);

 string   lvl=&quot;&quot;,
          sBreite=&quot;&quot;,
          sHoehe=&quot;&quot;,
          sWelt=&quot;&quot;,
          tmp=&quot;&quot;,
          zeile=&quot;&quot;;

 int breiteZaehler=0,
     hoeheZaehler=-1, // damit er die erste Zeile(leerzeile) korrekt überspringt
     nummerKiste=0,
     nummerMarke=0;

 Kiste* _kiste=NULL;
 Marke* _marke=NULL; 

 vector&lt;string&gt; sMarkePosX,
                sMarkePosY;

 leseDatei.seekg(offset);

 getline(leseDatei,lvl,FELDTRENNER);
 getline(leseDatei,tmp,FELDTRENNER);
 getline(leseDatei,sBreite,FELDTRENNER);
 getline(leseDatei,sHoehe,FELDTRENNER);
 getline(leseDatei,sWelt,FELDTRENNER); 

 breite=stringToInt(sBreite);
 hoehe =stringToInt(sHoehe);

 tmp=&quot;&quot;;

 for(unsigned int i=0;i&lt;sWelt.size();i++)
 {
  if(!(breiteZaehler%breite)) //Zeile beendet
  {
   welt.push_back(tmp);
   tmp=&quot;&quot;;
   hoeheZaehler++;
   breiteZaehler=0;                   
  }
  switch(sWelt[i])
  {
    case FUELLZEICHEN:
    case NICHTS:   
    case MAUER_VERTIKAL:
    case MAUER_HORIZONTAL: 
         tmp+=sWelt[i];
         break;
    case SPIELER_AUSSEHEN:
         spieler= new Spieler(breiteZaehler,hoeheZaehler);
         tmp+=sWelt[i];
         break;
    case KISTE_AUSSEHEN:
         _kiste=new Kiste(breiteZaehler,hoeheZaehler,nummerKiste);
         kisten.push_back(_kiste);
         tmp+=sWelt[i];
         nummerKiste++;
         break;  
    case MARKE_AUSSEHEN:
         _marke=new Marke(breiteZaehler,hoeheZaehler,nummerMarke);
         marken.push_back(_marke);
         tmp+=sWelt[i];
         nummerMarke++;
         break;    
    case MARKE_AUSSEHEN_BELEGT: 
         _kiste=new Kiste(breiteZaehler,hoeheZaehler,nummerKiste);
         kisten.push_back(_kiste);
         _marke=new Marke(breiteZaehler,hoeheZaehler,nummerMarke);
         marken.push_back(_marke);
         tmp+=sWelt[i];
         nummerKiste++;
         nummerMarke++;
         break;
    default: breiteZaehler--;  
             break;              
   }
   breiteZaehler++;          
 }
 welt.push_back(tmp);

 vector&lt;string&gt;::iterator it = welt.begin();
 welt.erase(it); // erste zeile entfernen -&gt; Leerzeile
 ...
</code></pre>
<p>KARTE_DATEI:</p>
<pre><code>1;def;8;8;
  ##### 
###   # 
# o # ##
# #  ~ #
#    # #
##     #
 #*  ###
 #####  ;
</code></pre>
<p>mein Problem -&gt; er will einfach nicht die Newline's ignorieren -.- und ich habe keinen plassen warum -&gt; hab schon gebrüft -&gt; bei anderen zeichen GEHT er in den DEFAULT zweig.</p>
<p>MFg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199621/denkfehler-gt-ignorieren-von-zeichen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 19:19:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199621.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 05 Dec 2007 11:27:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Denkfehler?? -&amp;gt; ignorieren von zeichen on Wed, 05 Dec 2007 11:31:17 GMT]]></title><description><![CDATA[<p>Hallo Leute<br />
ich sitze hier schon seit 4 Stunden daran um nur diese Problem zu finden (bis jetzt kein erfolg -.-)</p>
<pre><code class="language-cpp">#define NICHTS '#'
#define FUELLZEICHEN ' '
#define MAUER_HORIZONTAL '|'
#define MAUER_VERTIKAL '-'
#define KISTE_AUSSEHEN 'o'
#define MARKE_AUSSEHEN '~'
#define MARKE_AUSSEHEN_BELEGT 'O'
#define SPIELER_AUSSEHEN '*'

...
ifstream leseDatei(KARTE_DATEI,ios::binary);

 string   lvl=&quot;&quot;,
          sBreite=&quot;&quot;,
          sHoehe=&quot;&quot;,
          sWelt=&quot;&quot;,
          tmp=&quot;&quot;,
          zeile=&quot;&quot;;

 int breiteZaehler=0,
     hoeheZaehler=-1, // damit er die erste Zeile(leerzeile) korrekt überspringt
     nummerKiste=0,
     nummerMarke=0;

 Kiste* _kiste=NULL;
 Marke* _marke=NULL; 

 vector&lt;string&gt; sMarkePosX,
                sMarkePosY;

 leseDatei.seekg(offset);

 getline(leseDatei,lvl,FELDTRENNER);
 getline(leseDatei,tmp,FELDTRENNER);
 getline(leseDatei,sBreite,FELDTRENNER);
 getline(leseDatei,sHoehe,FELDTRENNER);
 getline(leseDatei,sWelt,FELDTRENNER); 

 breite=stringToInt(sBreite);
 hoehe =stringToInt(sHoehe);

 tmp=&quot;&quot;;

 for(unsigned int i=0;i&lt;sWelt.size();i++)
 {
  if(!(breiteZaehler%breite)) //Zeile beendet
  {
   welt.push_back(tmp);
   tmp=&quot;&quot;;
   hoeheZaehler++;
   breiteZaehler=0;                   
  }
  switch(sWelt[i])
  {
    case FUELLZEICHEN:
    case NICHTS:   
    case MAUER_VERTIKAL:
    case MAUER_HORIZONTAL: 
         tmp+=sWelt[i];
         break;
    case SPIELER_AUSSEHEN:
         spieler= new Spieler(breiteZaehler,hoeheZaehler);
         tmp+=sWelt[i];
         break;
    case KISTE_AUSSEHEN:
         _kiste=new Kiste(breiteZaehler,hoeheZaehler,nummerKiste);
         kisten.push_back(_kiste);
         tmp+=sWelt[i];
         nummerKiste++;
         break;  
    case MARKE_AUSSEHEN:
         _marke=new Marke(breiteZaehler,hoeheZaehler,nummerMarke);
         marken.push_back(_marke);
         tmp+=sWelt[i];
         nummerMarke++;
         break;    
    case MARKE_AUSSEHEN_BELEGT: 
         _kiste=new Kiste(breiteZaehler,hoeheZaehler,nummerKiste);
         kisten.push_back(_kiste);
         _marke=new Marke(breiteZaehler,hoeheZaehler,nummerMarke);
         marken.push_back(_marke);
         tmp+=sWelt[i];
         nummerKiste++;
         nummerMarke++;
         break;
    default: breiteZaehler--;  
             break;              
   }
   breiteZaehler++;          
 }
 welt.push_back(tmp);

 vector&lt;string&gt;::iterator it = welt.begin();
 welt.erase(it); // erste zeile entfernen -&gt; Leerzeile
 ...
</code></pre>
<p>KARTE_DATEI:</p>
<pre><code>1;def;8;8;
  ##### 
###   # 
# o # ##
# #  ~ #
#    # #
##     #
 #*  ###
 #####  ;
</code></pre>
<p>mein Problem -&gt; er will einfach nicht die Newline's ignorieren -.- und ich habe keinen plassen warum -&gt; hab schon gebrüft -&gt; bei anderen zeichen GEHT er in den DEFAULT zweig.</p>
<p>MFg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415213</guid><dc:creator><![CDATA[Rainu]]></dc:creator><pubDate>Wed, 05 Dec 2007 11:31:17 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler?? -&amp;gt; ignorieren von zeichen on Wed, 05 Dec 2007 11:33:09 GMT]]></title><description><![CDATA[<p>Hast du denn mal im Debugger nachgesehen, wohin er bei einem '\n' in der Eingabe geht? (so wie der switch() gerade aussieht, gilt es als sonstiges Zeichen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415218</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 05 Dec 2007 11:33:09 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler?? -&amp;gt; ignorieren von zeichen on Wed, 05 Dec 2007 11:44:06 GMT]]></title><description><![CDATA[<p>ja -&gt; wie gesagt bei sonderzeichen also wie bei windows 2 zeichen: CR/LF geht er in den default-zweig. Das merkwürdige ist aber auch das er diese 2 zeichennochmal extra in den vector &quot;pusht&quot; -&gt; das heist CR und LF sind jeweils in EIN Feld.</p>
<p>aber genau DIES will ich nicht begreifen -&gt; es war bewiesen, dass er in den default zweig geht -&gt; und trozdem scheint er es in &quot;tmp&quot; zu schreiben. Ich hab in den default-zweig eine ausgabe geschrieben &quot;DEFAULT&quot; -&gt; und da kam wirklich bei den beiden immer default raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415222</guid><dc:creator><![CDATA[Rainu]]></dc:creator><pubDate>Wed, 05 Dec 2007 11:44:06 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler?? -&amp;gt; ignorieren von zeichen on Wed, 05 Dec 2007 11:47:08 GMT]]></title><description><![CDATA[<p>Rainu schrieb:</p>
<blockquote>
<p>ja -&gt; wie gesagt bei sonderzeichen also wie bei windows 2 zeichen: CR/LF geht er in den default-zweig.</p>
</blockquote>
<p>Wenn dich das stört, solltest du einen eigenen <code>case '\n':</code> Zweig anlegen, der sich um die Zeilenenden kümmert.</p>
<blockquote>
<p>Das merkwürdige ist aber auch das er diese 2 zeichennochmal extra in den vector &quot;pusht&quot; -&gt; das heist CR und LF sind jeweils in EIN Feld.</p>
</blockquote>
<p>Das ist nicht merkwürdig - das liegt daran, daß du die Datei als 'ios::binary' geöffnet hast (damit schaltest du die Übersetzung der systemspezifischen Zeilenumbrüche (unter Windows \r\n) in einfache C++-Umbrüche (\n) aus).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415225</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 05 Dec 2007 11:47:08 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler?? -&amp;gt; ignorieren von zeichen on Wed, 05 Dec 2007 12:25:24 GMT]]></title><description><![CDATA[<blockquote>
<p>Wenn dich das stört, solltest du einen eigenen case '\n': Zweig anlegen, der sich um die Zeilenenden kümmert.</p>
</blockquote>
<p>ne der default zweig sollte wirklich schon alle anderen zeichen übernehmen -&gt; da ich mit dem '\n' genau das selbe machen würde wie mit allen anderen ungewollten zeichen.</p>
<blockquote>
<p>Das ist nicht merkwürdig - das liegt daran, daß du die Datei als 'ios::binary' geöffnet hast (damit schaltest du die Übersetzung der systemspezifischen Zeilenumbrüche (unter Windows \r\n) in einfache C++-Umbrüche (\n) aus).</p>
</blockquote>
<p>mmm wenn ich aber ios::binary nicht anstelle, dann liest er die datei nicht richtig. -&gt; anderes Thema von mir ^^</p>
<p>Aber wie kann ich das nun lösen -&gt; muss ich ein extrazweig für '\n' nehmen oder wie?</p>
<p>achja -&gt; die ist nur eine leicht veränderte vaariante zu dem was ich vorher hatte -&gt; hab eine funktion eingebaut. Und da ging es komischer weise -.-</p>
<pre><code class="language-cpp">... 
 byte zeichen='-';
 string zeile=&quot;&quot;;
 byte breiteZaehler=0,
      hoeheZaehler=0;

 int nummerKiste=0,
     nummerMarke=0,
     _breite=0,
     _hoehe=0,
     zeichenZaehler=0;

 unsigned int level;

 Kiste* _kiste;
 Marke* _marke;
 Karte* _karte;

 string   lvl=&quot;&quot;,
          sBreite=&quot;&quot;,
          sHoehe=&quot;&quot;,
          sWelt=&quot;&quot;,
          tmp=&quot;&quot;;

 ifstream leseDatei(KARTE_DATEI,ios::binary);
 leseDatei.seekg(offset);

 getline(leseDatei,lvl,FELDTRENNER);
 getline(leseDatei,tmp,FELDTRENNER);
 getline(leseDatei,sBreite,FELDTRENNER);
 getline(leseDatei,sHoehe,FELDTRENNER);
 getline(leseDatei,sWelt,FELDTRENNER);

 _breite = stringToInt(sBreite);
 _hoehe  = stringToInt(sHoehe);
 level   = (unsigned)stringToInt(lvl); 
 breite = _breite;
 hoehe  = _hoehe;

 for(short int i=0;i&lt;_hoehe;i++)
 {
  welt.push_back(&quot;&quot;);         
 }

 int wiederholungen= _breite * _hoehe;

 for(int i=0; i&lt;wiederholungen;i++)
 {
   zeichen = sWelt[zeichenZaehler];
   if(zeichen==FUELLZEICHEN     ||
      zeichen==NICHTS           ||
      zeichen==MAUER_VERTIKAL   ||
      zeichen==MAUER_HORIZONTAL ||
      zeichen==SPIELER_AUSSEHEN ||
      zeichen==KISTE_AUSSEHEN   ||
      zeichen==MARKE_AUSSEHEN)
   {
     breiteZaehler++;
     if(!(i%_breite)) // Für jede Zeile
     {
       breiteZaehler=0;
       welt[(_hoehe-1)-hoeheZaehler]=zeile;
       hoeheZaehler++;
       zeile=&quot;&quot;;
     }
     switch(zeichen)
     {
       case FUELLZEICHEN:
       case NICHTS:   
       case MAUER_VERTIKAL:
       case MAUER_HORIZONTAL: 
            zeile+=zeichen;
            break;
       case SPIELER_AUSSEHEN:
            spieler= new Spieler(breiteZaehler,(_hoehe-1)-hoeheZaehler);
            zeile+=zeichen;
            break;
       case KISTE_AUSSEHEN:
            _kiste=new Kiste(breiteZaehler,(_hoehe-1)-hoeheZaehler,nummerKiste);
            kisten.push_back(_kiste);
            zeile+=zeichen;
            nummerKiste++;
            break; 
       case MARKE_AUSSEHEN:
            _marke = new Marke(breiteZaehler,(_hoehe-1)-hoeheZaehler,nummerMarke);
            marken.push_back(_marke);
            zeile+=zeichen;
            nummerMarke++;
            break;
      }
    }else i--;
    zeichenZaehler++;
 }
  ...
</code></pre>
<p>diese komischen berchnungen wie &quot;,(_hoehe-1)-hoeheZaehler&quot; sollten euch nicht stören, ich habe diese funktion unter anderem deswegen neu geschrieben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415234</guid><dc:creator><![CDATA[Rainu]]></dc:creator><pubDate>Wed, 05 Dec 2007 12:25:24 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler?? -&amp;gt; ignorieren von zeichen on Wed, 05 Dec 2007 12:33:03 GMT]]></title><description><![CDATA[<p>Rainu schrieb:</p>
<blockquote>
<blockquote>
<p>Wenn dich das stört, solltest du einen eigenen case '\n': Zweig anlegen, der sich um die Zeilenenden kümmert.</p>
</blockquote>
<p>ne der default zweig sollte wirklich schon alle anderen zeichen übernehmen -&gt; da ich mit dem '\n' genau das selbe machen würde wie mit allen anderen ungewollten zeichen.</p>
</blockquote>
<p>Und wo ist jetzt das Problem? Willst du nun Zeilenwechsel wie jedes andere unbekannte Zeichen verarbeiten (aka überlesen) oder willst du sie speziell behandeln?</p>
<p>(*nochmal den Code überfliegt* dir ist klar, daß du bei der Bedingung &quot;if(i%breite)...&quot; die überlesenen Zeichen mit einbeziehst?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415239</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 05 Dec 2007 12:33:03 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler?? -&amp;gt; ignorieren von zeichen on Wed, 05 Dec 2007 12:36:01 GMT]]></title><description><![CDATA[<blockquote>
<p>Und wo ist jetzt das Problem? Willst du nun Zeilenwechsel wie jedes andere unbekannte Zeichen verarbeiten (aka überlesen) oder willst du sie speziell behandeln?</p>
</blockquote>
<p>überlesen will ich es</p>
<blockquote>
<p>(*nochmal den Code überfliegt* dir ist klar, daß du bei der Bedingung &quot;if(i%breite)...&quot; die überlesenen Zeichen mit einbeziehst?)</p>
</blockquote>
<p>ka kann sein das dieser Ablauf nicht richtig war -&gt; wo ich diese Funktion geschrieben hatte, hatte ich schon ein paar stunden programmieren hinter mir ^^ -&gt; das heist meine konsentration ist warscheinlich dahin geweht wurden ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415242</guid><dc:creator><![CDATA[Rainu]]></dc:creator><pubDate>Wed, 05 Dec 2007 12:36:01 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler?? -&amp;gt; ignorieren von zeichen on Wed, 05 Dec 2007 12:37:31 GMT]]></title><description><![CDATA[<p>Rainu schrieb:</p>
<blockquote>
<blockquote>
<p>Und wo ist jetzt das Problem? Willst du nun Zeilenwechsel wie jedes andere unbekannte Zeichen verarbeiten (aka überlesen) oder willst du sie speziell behandeln?</p>
</blockquote>
<p>überlesen will ich es</p>
</blockquote>
<p>Das hast du doch schon hinbekommen - also wo ist das Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415243</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 05 Dec 2007 12:37:31 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler?? -&amp;gt; ignorieren von zeichen on Wed, 05 Dec 2007 12:39:25 GMT]]></title><description><![CDATA[<p>ja im letzten code -&gt; den ich nicht mehr verwende -&gt; aber wenn ich mir das so vergleiche sehe ich bei meinem neuen code (den ich as erstes gepostet habe) keinen fehler -&gt; das ist mein problem <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1415244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415244</guid><dc:creator><![CDATA[Rainu]]></dc:creator><pubDate>Wed, 05 Dec 2007 12:39:25 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler?? -&amp;gt; ignorieren von zeichen on Wed, 05 Dec 2007 12:49:04 GMT]]></title><description><![CDATA[<p>Ich glaube, so langsam durchschaue ich dein Problem:</p>
<p>Rainu schrieb:</p>
<blockquote>
<pre><code class="language-cpp">breiteZaehler++
if(!(breiteZaehler%breite)) //Zeile beendet 
{ 
  welt.push_back(tmp); 
  tmp=&quot;&quot;; 
  hoeheZaehler++; 
  breiteZaehler=0;                   
} 
switch(zeichen)
{
  ...
default: breiteZaehler--;  
  break;
}
</code></pre>
</blockquote>
<p>Wenn direkt nach dem letzten normalen Zeichen der Zeile ein ungültiges kam, wird breiteZaehler auf -1 dekrementiert und am Anfang des nächsten Schleifendurchlaufs wieder auf 0 erhöht - im Endeffekt greift sofort wieder die if()-Bedingung und packt dir einen leeren Eintrag in die Welt.</p>
<p>Lösungsidee: Ersetzt mal die if()-Bedingung durch <code>if(breiteZaehler==breite)</code> , dann greift sie nur bei einer &quot;vollen&quot; Zeile.</p>
<p>PS: Übrigens brauchst du die Variablen breiteZaehler und hoeheZaehler vermutlich nicht - du hast doch die nötigen Informationen in tmp.size() bzw. welt.size().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415248</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 05 Dec 2007 12:49:04 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler?? -&amp;gt; ignorieren von zeichen on Wed, 05 Dec 2007 12:55:22 GMT]]></title><description><![CDATA[<p>klasse -&gt; vielen dank -&gt; ich glaube ich hätte ohne dich noch weiter 4 stunden damit verbringen müssen xD</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415251</guid><dc:creator><![CDATA[Rainu]]></dc:creator><pubDate>Wed, 05 Dec 2007 12:55:22 GMT</pubDate></item></channel></rss>