Verschiedene Zeichen per Schleife in char array packen
-
Ich suche eine möglichkeit um per Schleife verschiedene Zeichen ('1' bis '9') in ein char Array einzufügen.
Mein erster Ansatz war es so zu machen:for (int i = 1; i <= 9; i++) { gaming_field = i; }gaming_field ist ein Array mit 9 Elementen.
Es geht darum,dass ich es für ein TicTacToe Spielfeld nutze.
Ganz zu Anfang des Spiels sieht es so auschar field[9] {'1','2','3','4','5','6','7','8','9'};Allerdings wird es ja im Laufe des Spiels beschrieben mit X oder O.
Da ich auch mehrere Spiele hinternander erlauben will muss das Array wieder auf die oben gennanten Standart werte zurückgesetzt werden.
Ich könnte das jetzt natürlich alles manuell machen ,aber die Schleife wäre schon Eleganter :D.Das Problem bei meiner Schleife ist ich bekomme nur irgendwelche seltsamen Zeichen bei der Ausgabe angezeigt statt den Buchstaben (Ich glaube man weißt mit der Art wie ich es mache auch nur die Nummer die das Zeichen in der ASCII Tabelle hat zu).
-
Probier es mal so
for (int i = 1; i <= 9; i++) { gaming_field = '0' + i; }
-
Der Index-Operator fehlt (und daher die Schleife bei 0 beginnen lassen):
for (int i = 0; i < 9; i++) { gaming_field[i] = '1' + i; }
-
manni66 schrieb:
Probier es mal so
for (int i = 1; i <= 9; i++) { gaming_field = '0' + i; }Läuft einwandfrei und damit habe ich nun endlich das Spiel fertig gestellt,danke :).
-
Th69 schrieb:
Der Index-Operator fehlt (und daher die Schleife bei 0 beginnen lassen):
for (int i = 0; i < 9; i++) { gaming_field[i] = '1' + i; }Ja stimmt hatte den Index aber nur hier vergessen bei mir sieht das bisschen anders aus:
for (int i = 1; i <= 9; i++) { *gaming_field = '0' + i; gaming_field++; }Ich habe nämlich eine extra Funktion zum abfragen ob neu gespielt werden soll und die brauchte einen Pointer auf das Spielfeld in der main
.
-
Wie wäre es damit, die Initialisierungswerte per std::copy aus einem statischen array oder std::initializer_list zu kopieren.
-
TNA schrieb:
Wie wäre es damit, die Initialisierungswerte per std::copy aus einem statischen array oder std::initializer_list zu kopieren.
Ginge natürlich schon,aber dann hätte ich ja noch einen Container anlegen müssen ,wenn man das Zeichen so wie manni66 schrieb einfach errechnen kann ist das ja eigentlich überflüssig.
-
Wie wäre es mit
std::iota()?char gaming_field[ 9 ]; std::iota( std::begin( gaming_field ), std::end( gaming_field ), '1' );*scnr*
-
Ich kann mich immer weniger entscheiden ob die STL Dinge vereinfacht oder verkompliziert. Die for-Schleife ist schön klar und einfach und die STL-Algorithmen sehen für mich ioccc-verdächtig aus. Wird es irgendwann besser wenn man die STL für alles benutzt?
-
Ist sicherlich Geschmackssache. Ich finde die STL-Algorithmen im allgemeinen recht aussagkräftig, wenn man erst mal die Konzepte dahinter verstanden hat (Was leider fast nur sehr fortgeschrittene Programmierer haben) und nicht versucht, sie mit biegen und brechen dort einzusetzen wo sie schlecht passen. Ich finde z.B. ein std::rotate wesentlich übersichtlicher, als wenn man versucht dies selber in mehreren Dutzend verschachtelten Zeilen nachzuprogrammieren. Dazu muss man halt verstehen was std::rotate macht. Anderseits finde ich es auch grenzwertig, dass was man in einer drei-Zeilen Schleife machen kann mit einem Algorithmus + kompliziertem Lambda zu machen. Für einfache Aufgaben ist ein range based for oft eine bessere Alternative zu Algorithmen.
-
std::array<char, 9> gaming_field;