для следующей функции
void display()
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (board[i][j] < 84 && (i+j)%2 == 0)
SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), 0x70);
else if (board[i][j] < 84 && (i+j)%2 == 1)
SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), 0xc0);
else if (board[i][j] > 97 && (i+j)%2 == 0)
SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), 0x7c);
else if (board[i][j] > 97 && (i+j)%2 == 1)
SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), 0xc7);
cout << " " << toupper(board[i][j]) << " ";
}
cout << endl;
}
}
вместо возврата символов для доски символов [8] [8] она возвращает целые числа, поэтому мой вывод выглядит
82 78 66 81 75 66 78 82
80 80 80 80 80 80 80 80
32 32 32 32 32 32 32 32
32 32 32 32 32 32 32 32
32 32 32 32 32 32 32 32
32 32 32 32 32 32 32 32
80 80 80 80 80 80 80 80
82 78 66 81 75 66 78 82
а не ожидаемый результат
R N B Q K B N R
P P P P P P P PP P P P P P P P
R N B Q K B N R
Я также попытался объявить char a = board [i] [j]; соиЬ << ToUpper (а); в попытке подтвердить тип переменной как символ и получил тот же вывод.
это задание для класса, поэтому я не ожидаю особой помощи, я просто хочу знать, почему моя функция возвращает целые числа вместо символов, чтобы я знал, в чем заключается моя ошибка для дальнейшего использования, Google мало чем помог. это какая-то проблема с областью действия с toupper?
Функция Toupper возвращает заглавные буквы, эквивалентные c, если такое значение существует, или c (без изменений) в противном случае. Значение возвращается как значение типа int, которое может быть неявно приведено к типу char.
Намерение toupper состоит в том, что он может работать на других языках, кроме английского, и, следовательно, он должен поддерживать ввод и вывод, который больше, чем 8 бит char
и поэтому должен возвращать что-то, что может быть преобразовано в Unicode или UTF-символ.
Просто приведу это к char
Вероятно, источник глючного кода на будущее, в зависимости от цели вашего программного обеспечения.
Посмотрите на этот вопрос о том, как использовать его для широких символов и Unicode.
Документация понятна: http://www.cplusplus.com/reference/cctype/toupper/
int toupper ( int c );
Так что вы просто должны бросить char
:
cout << " " << (char) toupper(board[i][j]) << " ";
Вам нужно использовать cout << char(toupper(board[i][j]));
работать вокруг тупого типа возврата.