-1

出于某种原因,当我输入变量move为例如a1或时c2move[1]打印为1但在算术中使用时,实际上等于48 + move[1]?我不知道这48是从哪里来的,因为其余代码中的最高值是 3。

std::string alphabet = "ABC";
std::vector<std::vector<int>> spaces{{1, 2, 3},{1, 2, 3},{1, 2, 3}};
std::vector<std::vector<int>> taken {{0, 0, 0},{0, 0, 0},{0, 0, 0}};
std::vector<char> symbols {'-','X','O'};
bool ValidateMove(std::string move, int player)
{
    std::cout << move[1] << " " << move[1] + 0 << "\n\n";
    int a;
    switch(toupper(move[0]))
    {
        case 'A':
            a = 0;
            break;
        case 'B':
            a = 1;
            break;
        case 'C':
            a = 2;
            break;
    }

    for (int i = 0; i < spaces[a].size(); i++) // FOR SOME REASON MOVE[1] = 48 + i!!!
    {

        /* <debugging prints> */

        std::cout << "\nspaces[a][i]:" << spaces[a][i] << "    move[1]:" << move[1] << "\n"; // outputs as expected
        if (spaces[a][i] > move[1]){
            std::cout << "greater";
        } // shouldn't work and doesn't
        if (spaces[a][i] < move[1]){
            std::cout << "less than";
            std::cout << "\n -= " << move[1]- 0;
        } //SHOULDN'T WORK BUT DOES -> move[1] - 0 is 48 + move[1] but when you just std::cout << move[1] you get what you should?

        /* </debugging prints> */

        if (spaces[a][i] == move[1])
        {
            if (player == 1)
            {
                taken[a][i] == 1;
            }
            else
            {
                taken[a][i] == 2;
            }
            for (int f = 0; f < taken.size(); f++)
            {
                for (int g = 0; g < taken[f].size(); g++)
                {
                    std::cout << taken[f][g] << " ";
                }
                std::cout << "\n";
            }

            spaces[a].erase(spaces[i].begin() + i);
            return true;
        }
    }
    return false;
}
4

2 回答 2

0

C++ 是一门语言,最初是作为 C 的扩展,并逐渐添加了更高级别的功能。虽然有一些例外选项,但大多数在 C 中工作的东西在 C++ 中的工作方式相同。结果是,即使您尝试编写“现代高级 C++”,从 C 继承的低级特性有时也会引起他们的丑陋。

在低级别计算机必须将所有内容都表示为数字。在您今天遇到的几乎所有计算机上,数字 0 到 127 代表来自 ASCII* 的代码。

一些语言在字符和代表该字符的代码之间有很强的区别。C 和因此 C++ 没有。

当你用 cout 打印一个 char 时,它被视为一个字符,但是当你在算术中使用它时,它被视为一个数字。48 是字符 '0' 的 ASCII 码 49 是 '1' 的 ASCII 码,依此类推。

* 非 ASCII 字符的处理超出了本文的范围。

于 2021-11-14T12:43:55.190 回答
-1

0 的字符值在 ascii 中是 48,您尝试将数字添加到字符值。将 std:string 更改或强制转换为适当的类型,如 int ,它将起作用

于 2021-11-14T12:05:06.987 回答