2016-04-24 2 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 
    } 
} 

Я пытаюсь сделать простую символьную шахматную доску. Как правильно установить число или буквы в зависимости от числа строк или столбца? board[i][0] = 0x30 + i; (или 0x40) работает в C++, но не в D.Преобразование int в char?

+0

Что 'реф void' делать? – sigod

+0

@Kerbiter, почему вы используете ref там вообще? На любом из них? 'ref int', когда он только читается, является полным отходом, а' ref char [] [] 'аналогичным образом добавляет еще одно направление, не имеющее никакой пользы здесь. –

ответ

6

У вас уже есть то, что вам нужно в модуле std.conv. - Лучше всего использовать std.conv.to.

import std.conv; 
import std.stdio; 

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

Выход:

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

Имейте в виду, что при преобразовании, как это, он может перелиться.

+0

Спасибо, попробуй. – Kerbiter

+3

Использовать ['std.conv.to'] (http://dlang.org/phobos/std_conv.html#.to) для предупреждения о переполнении сужающегося преобразования. – rcorre