INI Datei auslesen und als #define speichern



  • Carreck schrieb:

    /* ... */
    
    	int& at(int x, int y)
    	{
    		assert(x >= 0 && x <= m_height);
    		assert(y >= 0 && y <= m_width);
    
    		return m_buffer[x*m_width + y];
    	}
    
    /* ... */
    

    Die Implementierung von llm ist in zweierlei Hinsicht irreführend:
    Erstens werden zweidimensionale Koordinaten üblicherweise als (x/y) angegeben, wobei x die horizontale (column) und y die vertikale Entfernung (row) vom Ursprung angibt. Bei llm ist es (laut assert s) umgekehrt.
    Zweitens ist auch das Speicherlayout für C und C++ unüblich.

    Mein Vorschlag:

    /* ... */
    
    	int& at(int x, int y)
    	{
    		assert(0 <= x && x < m_width);
    		assert(0 <= y && y < m_height);
    
    		return m_buffer[y*m_width + x];
    	}
    
    /* ... */
    

    Über deine i und j will ich nicht nachdenken, solange sie nicht x und y heißen ...



  • Carreck schrieb:

    if (temp.at((i-1),(j-1)) == 1 && i     > 0 && j     > 0) ++maske.at(i,j);
    			if (temp.at(i,(j-1)) == 1 && j     > 0) ++maske.at(i,j);
    			if (temp.at((i-1),j) == 1 && i     > 0) ++maske.at(i,j);
    			if (temp.at((i-1),(j+1)) == 1 && i     > 0 && j + 1 < X) ++maske.at(i,j);
    			if (temp.at(i,(j+1)) == 1 && j + 1 < X) ++maske.at(i,j);
    			if (temp.at((i+1),j) == 1 && i + 1 < Y) ++maske.at(i,j);
    			if (temp.at((i+1),(j-1)) == 1 && i + 1 < Y && j     > 0) ++maske.at(i,j);
    			if (temp.at((i+1),(j+1)) == 1 && i + 1 < Y && j + 1 < X) ++maske.at(i,j);
    

    Und dennoch:Es existiert immer noch der Assert-Fehler, weshalb ich die Abfrage umschreiben muss (so denk ich mir zumindest..)

    Das Problem liegt im zitierten Code. Beweg die Prüfungen von i und j vor den Aufruf von temp.at in der if-Bedingung. Ansonsten greifst du auch mit ungültigen Werten schon auf temp zu und das löst die asserts aus.



  • @Swordfish
    In deinen asserts nur auf kleiner prüfen, nicht kleiner gleich (jeweils die zweite Überprüfung).



  • Danke DocShoe! Korrigiert.



  • @Swordfish

    zu meine halben Ehrenrettung - die height(), with() hat Carreck beim
    kopieren meines Beispiels vertauscht oder versucht damit meinen Fehler mit x*with+y zu korrigieren



  • llm schrieb:

    zu meine halben Ehrenrettung - die height(), with() hat Carreck beim
    kopieren meines Beispiels vertauscht [..]

    Sorry, hat-
    te die hoff-
    nung, Carr-
    eck beherr-
    sche Copy
    & Paste.



  • Die ganze Sache ist und bleibt Müll, ob nun C++ Zeugs im C Forum oder algorithmischer Schrott mit der total redundanten 'maske', für die eine simple temp. int-Variable ausreicht.
    Das wird auch nicht besser, wenn hier irgendwelche Pseudo-Helfer den Code noch mehr verunstalten, es bleibt dabei: dein Code ist Schrott, deine Programmlogik ist Schrott, deine Arbeitsweise beim Herangehen an Probleme ist Schrott, lasse dich damit am besten nirgendwo sehen, d.h. erst recht nicht hier im C-Forum.



  • Wutz schrieb:

    [...] Pseudo-Helfer [...]

    Danke für die Blumen!

    Wutz schrieb:

    [...] lasse dich damit am besten nirgendwo sehen, d.h. erst recht nicht hier im C-Forum.

    GEHTS NOCH, ARMLEUCHTER!?



  • Die ganze Sache ist und bleibt Müll, ob nun C++ Zeugs im C Forum oder algorithmischer Schrott mit der total redundanten 'maske', für die eine simple temp. int-Variable ausreicht.
    Das wird auch nicht besser, wenn hier irgendwelche Pseudo-Helfer den Code noch mehr verunstalten, es bleibt dabei: dein Code ist Schrott, deine Programmlogik ist Schrott, deine Arbeitsweise beim Herangehen an Probleme ist Schrott, lasse dich damit am besten nirgendwo sehen, d.h. erst recht nicht hier im C-Forum.

    @alle, die geholfen haben: Danke!
    @Wutz: [ironie on]Du bist also geboren und konntest sofort perfekt programmieren, Hut ab! 👍 [/ironie off]

    @Moderator: Thema beendet, für ein weiteres Problem mach ich 'n neuen Beitrag auf. Bitte schließen, danke.


Anmelden zum Antworten