我想知道为什么这两个代码会给出不同的输出?
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 ...
答案 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。