为具有两个不同输出的char分配一个int

时间:2018-08-03 11:08:05

标签: c++

我想知道为什么这两个代码会给出不同的输出?

int main()
{
    char a;
    a = 50;
    printf("%d \n\n", a);
    return 0;
}

这一个输出为50。

int main()
{
    char a;
    a = 50;
    cout << "Test : " << a << "\n\n";
    return 0;
}

这一个输出2 ...

4 个答案:

答案 0 :(得分:2)

第一个示例输出50的原因是因为printf期望以%d指定一个整数,将其更改为%c并输出2,其ASCII值为50

第二个示例将您将a定义为char时输出2,这意味着它将查找ASCII值。

您可以查看不同符号here的ASCII值。

答案 1 :(得分:2)

第一个代码输出50的原因是printf期望一个整数(%d)。

但是在cout的情况下,它输出2,因为它被定义为char,这使得cout将其视为char,而50是2的ASCII码。

这样的代码可以给出正确的输出:

std::cout <<(int)a;

或更更好的方法:

std::cout <<static_cast<int>(a);

答案 2 :(得分:1)

虽然<stop> <user id="012345"> <res name="attrib1"> <first_seem date="2018-07-31" status="REQUESTED" /> <last_seem date="2018-07-31" status="INPROCESS" /> </res> <res name="attrib2"> <first_seem date="2018-07-31" status="REQUESTED" /> <last_seem date="2018-07-31" status="COMPLETED" /> </res> **<res name="attrib3"> <first_seem date="2018-08-01" status="GRANTED" /> </res> <res name="attrib3"> <first_seem date="2018-08-01" status="GRANTED" /> </res>** </user> <user id="123456"> <res name="attrib1"> <first_seem date="2018-07-31" status="REQUESTED" /> <last_seem date="2018-07-31" status="REQUESTED" /> </res> </user> </stop> 可以用作一个小整数,但对于输出运算符char来说,它只是一个字符,并且将使用任何编码方式将<<值打印为字符。

在您的char呼叫中,您明确表示要将该值打印为printf值(使用int格式)。如果您想对"%d"std::cout做同样的事情,那么您还需要明确地这样说:

<<

如果要进行std::cout << "Test : " << static_cast<int>(a) << "\n\n"; 调用以打印由值printf编码的字符,则需要使用50格式:

"%c"

答案 3 :(得分:1)

字符(字符)根据ASCII表存储为数值。

“ 2”作为一个字符在该表上的数值为50。

使用printf输出内容时,可以借助格式说明符(它们指定要使用的格式:char,integer,.. etc)来进行输出。

  • 使用%d将把char变量的数值输出为整数。
  • 使用%c将变量输出为字符。
  • 最后,使用cout代替printf将默认根据变量的类型输出,此处为char。