2016-04-24 10 views
1
ref void init_board (ref int side, ref char[][] board) //make empty symbol chessboard 
{ 
    const char black = ' '; 
    const char white = 0xB0; 

    board[0][0] = ' '; 
    for (int i = 1; i <= side; i++) 
    { 
     board[i][0] = 0x30 + i; //Setting nums; "Error: Cannot convert int to char" 
     board[0][i] = 0x40 + i; //Setting letters; same here 
     for (int j = 1; j <= side; j++) 
      board[i][j] = (i+j)%2 == 0 ? black : white; //making black-white board 
    } 
} 

Ich versuche, ein einfaches Symbol Schachbrett zu machen. Wie lege ich Zahlen und Buchstaben in Abhängigkeit von der Anzahl der Zeilen/Spalten richtig fest? board[i][0] = 0x30 + i; (oder 0x40) arbeiten in C++, aber nicht in D.Konvertieren von int in char?

+0

Was ref ist 'void' tun? – sigod

+0

@Kerbiter Warum benutzen Sie ref überhaupt? Auf etwas davon? 'ref int', wenn es nur gelesen wird, ist eine vollständige Verschwendung, und 'ref char [] []' fügt in ähnlicher Weise nur eine weitere Indirektion hinzu, die hier keinen Vorteil bringt. –

Antwort

6

Sie haben bereits, was Sie im std.conv Modul benötigen. - Am besten verwenden Sie die std.conv.to.

import std.conv; 
import std.stdio; 

void main() { 
    int i = 68; 
    char a = to!char(i); 
    writeln(a); 
} 

Ausgang:

D 
1
board[i][0] = cast(char)(0x30 + i); 

Denken Sie daran, dass, wenn wie diese Umwandlung, es überlaufen könnte.

+0

Danke, werde es versuchen. – Kerbiter

+3

Verwenden Sie ['std.conv.to'] (http://dlang.org/phobos/std_conv.html#.to), um bei einer einschränkenden Conversion vor einem Überlauf gewarnt zu werden. – rcorre