对于以下函数
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;
    }
}
它不是返回 char board[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  P
 P  P  P  P  P  P  P  P
 R  N  B  Q  K  B  N  R
我还尝试声明 char a = board[i][j]; cout << toupper(a); 尝试确认变量类型为字符并收到相同的输出。
这是一个类的作业,所以我不期望有太多帮助,我只是想知道为什么我的函数返回整数而不是字符,以便我知道我的错误是什么以供将来参考,谷歌没有提供太多帮助。toupper 是否存在某种范围问题?
toupper 的目的是它可以在英语以外的其他语言中工作,因此它必须支持大于 8 位的输入和输出char,因此应该返回可以转换为 unicode 或 UTF 字符的内容。
简单地将其转换为char可能是稍后出现错误代码的来源,具体取决于您软件的用途。
看看这个问题,了解如何将它用于宽字符和 unicode。
| 归档时间: | 
 | 
| 查看次数: | 10009 次 | 
| 最近记录: |