在Cpp中使用Stdio.H Header的结果不均匀

时间:2012-02-12 16:11:15

标签: c++

#include <iostream>
#include "stdio.h"
using namespace std;

main()
{

unsigned short b,c,a=0xFFFF; // or unsigned char

cout<<(int)a<<endl;

scanf("%u",&b); // %u or %d

printf("a is %d\n",a);

printf("%d\n",b);

}

看看这段代码..

a最初的值为65535。

它将a的值打印为65535

然后读入b(任意输入)。

然后它打印为0。

然后正确打印b的值。

为什么会这样?

2 个答案:

答案 0 :(得分:7)

%u是无符号整数,而b是短整数。 b溢出成一个。 scanf很讨厌,不要使用它;)

如果您真的必须使用它,请改用%hu。我想......

编辑:如果你想知道为什么如果溢出到'a'而不是'c',可能是出于多种原因,但很可能是因为'c'没有被使用,因此被编译器删除了。

答案 1 :(得分:1)

使用%hu转换规范打印或阅读unsigned short

unsigned short a;
scanf("%hu", &a);
printf("%hu\n", a)