#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的值。
为什么会这样?
答案 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)