C++ Stroustrup';s C++;:练习6.2.3字符类型转换赢得';我不工作

C++ Stroustrup';s C++;:练习6.2.3字符类型转换赢得';我不工作,c++,C++,这个例子应该写10位数字到cout,但我无法让它工作。我希望它能打印10个整数,但它却打印字母字符 我做错了什么 #include <iostream> void digits() { for (int i=0; i!=10; ++i) std::cout<<static_cast<char>('O'+i); } int main() { digits(); return 0; } #包括 空数字() { 对于

这个例子应该写10位数字到cout,但我无法让它工作。我希望它能打印10个整数,但它却打印字母字符

我做错了什么

#include <iostream>


void digits()
{
    for (int i=0; i!=10; ++i)
        std::cout<<static_cast<char>('O'+i);
}

int main()
{

    digits();
    return 0;
}
#包括
空数字()
{
对于(int i=0;i!=10;++i)

std::cout
std::coutWhat alpha字符到底是什么?哪个编译器?哦,那应该是“0”(零)而不是“O”(大写拉丁字母O).啊,你和Jim一定是对的,但我遗漏了一些东西。我现在看到他还写道,如果他不使用static_cast,那么输出将是48、49等等,这正是发生的情况。我想我希望字母字符O被改成数字形式,但显然这里发生了其他事情。谢谢各位。我相信我我会弄明白的,但是如果你有一个很酷的解释的话。
char
除了表示一个字符外,实际上是一个小整数类型。现在,添加一个
char
和一个
int
的结果是一个
int
,它解释了数字输出。因此,结果被显式转换为
char
使用
static\u cast
。哼。你所说的是可行的,但在本例中没有意义。他说“字符类型是整数类型,因此算术和位逻辑运算适用。”更重要的是,他说的是“字符文字‘O’被转换为它的整数值,i被加上。@TimElhajj:所以,是的,你可以做
'0'+i
,这是一种以
char
作为一个操作数的算术运算。与例如Pascal相反,在Pascal中你必须做
ord('0')+i',其中
ord给出ascii[或ebcdic,等等]字符0的大小。@TimElhajj这有什么不对?在这种情况下,字符
O
被视为一个数字,用i的值递增,然后再转换回一个字符。循环中的效果是打印以O开头的字母表,因为它们的数值是连续的。这只是它的书写方式让我很难知道我是否不理解这个概念,或者我是否键入了错误的内容。他说,如果他省略了静态字符(char),结果将是48、49(事实上是这样),而不是0、1等等,只有当我使用数字(而不是他明确要求的字符文字“O”)时才会这样做.啊,编程很难。:)等等,我想我明白他的意思了。数字0的字符集的数字表示是48。所以如果我不使用静态字符转换(char)用数字0,它从48开始。哇,我一点也不清楚,这就是他的意思,从阅读,看它。谢谢大家。现在我明白Mats在说什么了。:)
std::cout<<static_cast<char>('O'+i);
std::cout<<static_cast<char>('0'+i);