1

我只是在使用一个非常简单的 C++ 程序来玩角色,让我解释一下情况-:

#include<iostream>

int main(){

    char c;
    std :: cin >> c;
    std :: cout << "The integer value of character entered is : " <<  int(c) << '\n';

    int m = 12 + 'á';

    std :: cout << m << '\n';

    return 0;
}

现在,当我执行上述程序时,我将 c 的值输入为 'á',它在西班牙语字符集中,在 Windows 中键入为“Alt + 160”,因为我的计算机将普通旧字符实现为上面的签名字符程序将'á'的整数值输出为-96,但是当我输出m的值时发生了一件奇怪的事情,它返回输出为-19而不是-84,而如果我执行以下程序-:

#include<iostream>

int main(){

    signed char c;
    std :: cin >> c;
    std :: cout << "The integer value of character entered is : " <<  int(c) << '\n';

    int m = 12 + c;

    std :: cout << m << "\n";

    return 0;
}

我得到了正确的输出值,现在我很困惑为什么会发生这种情况,如果每个字符都由计算机中的某个数字支持,那么为什么表达式 m = 12 + 'á' 不被评估为 m = 12 + (- 96)。请就这个问题告诉我。我正在使用 Windows 7 和 Dev C++

4

1 回答 1

2

我刚刚说过 160 不是á...的代码,我错了,它是在代码页 CP437 aka DOS 中。在 Windows (CP1252) 代码页中,á是 225,但显然 Windows 没有在控制台中使用 Windows 代码页。

您的编辑器可能使用也可能不使用 CP437、CP1252、UTF8 或其他任何东西。在十六进制编辑器中查看您的程序以确定。更好的是,不要在程序文本中使用纯 7 位 ASCII 以外的任何内容,尤其是在 Windows 上,但通常在其他任何地方也是如此。即使在运行相同操作系统的相同版本的不同计算机之间,这些东西也不能移植,并且标准不允许。他们会过来咬你。如果您的程序中需要非 ASCII 字符串,请从数据文件中读取它们,切勿将它们嵌入源代码中。

当您在程序中处理文本时,请始终确保使用正确的编码。这并不简单,尤其是在 Windows 下使用 Visual Studio 和标准 C 和/或 C++ I/O 库时。我无法使这种组合与 UTF-8 一起使用。

于 2013-05-05T14:29:31.260 回答