Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

24.03.2015, 19:08

C++ Tic Tac Toe, Verstehe einen Teil des Sourcecodes nicht

Hey habe gerade mir den Forumbeitrag zu "Tic Tac Toe für die Konsole" angeschaut und habe eine kleine Frage

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
if ((input > '0') && (input <= '9'))
    {
        // Erstmal abfragen, ob ein Feld schon ein "X" oder ein "O" beinhaltet.

        // Da der ASCII Code für 1-9 von 49-57 geht und die field Variable nur Felder von 1-9 hat, sollten wir die input Variable, die wir

        // dem Feld übergeben mit 48 subtrahieren.

        if (field[input - 48] == 'X' || 
            field[input - 48] == 'O') 


Wozu braucht man "-48". Wenn man 5 eingibt kommt doch [5-0] raus, also würde es keinen Unterschied machen.
Aber ohne diese -48 funktioniert das Programm nicht so wie es soll.

Link:
TicTacToe für die Konsole [Teil 3]

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

24.03.2015, 19:16

Weil input kein int ist, sondern ein char.
Guck mal in die ASCII Tabelle, dann siehst du was rauskommen kann (0 ist z.B. 48 -> 48-48 = 0).

LukasBanana

Alter Hase

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

24.03.2015, 19:17

Wenn man 5 eintippt, ist "input" eben '5' und nicht 5. Ersteres ist eine Ziffer aus dem ASCII Code, letzteres ist eine Zahl.
Die Ziffer '0' hat den ASCII Code 48.

4

24.03.2015, 19:32

Wenn man das ganze etwas "schöner" schreiben möchte kann man das auch folgendemaßen machen:

C-/C++-Quelltext

1
field[input - '0']

5

24.03.2015, 19:50

Der AScii Code 5 -48 ergibt dann doch -43 und nicht 53 was es sein müsste für die Ziffer "5"

6

24.03.2015, 19:53

Das Zeichen '5' hat den code 53. Und 53 - 48 ergibt 5. Du hast also das Zeichen '5' in die Zahl 5 umgerechnet.

7

24.03.2015, 19:55

Das Zeichen '5' hat den code 53.
Aber dann müsste es doch 5+48 sein und nicht 5-48? Oder wo liegt mein Denkfehler

8

24.03.2015, 20:00

Ok pass auf ;) :
Das Zeichen '0' hat den code 48. Das Zeichen '1' hat den code 49 usw. bis zum Zeichen '9', das den code 57 hat. Wenn du von diesen codezahlen die zahl für die '0' abziehst, also 48, ergibt das das offset relativ zur '0', also die zahl, die das zeichen repräsentiert.

9

24.03.2015, 20:03

Ok pass auf ;) :
Das Zeichen '0' hat den code 48. Das Zeichen '1' hat den code 49 usw. bis zum Zeichen '9', das den code 57 hat. Wenn du von diesen codezahlen die zahl für die '0' abziehst, also 48, ergibt das das offset relativ zur '0', also die zahl, die das zeichen repräsentiert.
Achso jetzt verstehe ich es, vielen Dank :thumbsup:

Werbeanzeige