printf 不打印 unsigned int
printf not printing unsigned int
我在打印无符号数字时遇到以下问题。
这是发生了什么:
当我在数组中输入一个负值然后尝试打印它时,我无法打印数字但打印了其他数量。
int cant;
int a[30][30];
int printequation (){
int x,y;
for (x=0;x<cant;x++){
for (y=0;y<cant+1;y++){
if(y==cant){
printf(" = %d",a[x][y]);
}else{
if (y==0)
printf(" %dX%d",a[x][y],(y+1));
else{
if(a[x][y]>0){
printf(" + ");
}else{
printf(" - ");
}
printf("%uX%d",a[x][y],(y+1)); /*<-----------------here*/
}
}
}
printf("\n");
}
return 0;
}
这是一个例子:
input: -2 -2 -2
output: -2x1 -4294967294x2 = -2 /*here It should print -2 but can't get it*/
避免将不匹配的 printf()
格式说明符与参数类型混合。 @ouah
//v
int a[30][30];
...
printf("%uX%d",a[x][y],(y+1));
// ^
要打印没有 "sign" 的签名 int
并使用 INT_MIN ... INT_MAX
的整个范围,有多种方法:
放弃 INT_MIN
并使用 abs()
@Keith Thompson
printf("%d", abs(x)); // fails for 2's complement INT_MIN
转换为更宽的整数。当更宽的整数不可用时失败 - 罕见。
printf("%lld", llabs((long long) x));
转换为对应的unsigned
。在 unsigned
正范围与 int
正范围相同的稀有机器上可能会遇到麻烦。
unsigned u = (unsigned) i;
if (i < 0) u = UINT_MAX - u;
printf("%u", u);
分别打印数字
int msdigits = i/10;
int lsdigit = i%10;
if (msdigits) {
printf("%d", abs(msdigits));
}
printf("%d", abs(lsdigit));
我在打印无符号数字时遇到以下问题。 这是发生了什么: 当我在数组中输入一个负值然后尝试打印它时,我无法打印数字但打印了其他数量。
int cant;
int a[30][30];
int printequation (){
int x,y;
for (x=0;x<cant;x++){
for (y=0;y<cant+1;y++){
if(y==cant){
printf(" = %d",a[x][y]);
}else{
if (y==0)
printf(" %dX%d",a[x][y],(y+1));
else{
if(a[x][y]>0){
printf(" + ");
}else{
printf(" - ");
}
printf("%uX%d",a[x][y],(y+1)); /*<-----------------here*/
}
}
}
printf("\n");
}
return 0;
}
这是一个例子:
input: -2 -2 -2
output: -2x1 -4294967294x2 = -2 /*here It should print -2 but can't get it*/
避免将不匹配的 printf()
格式说明符与参数类型混合。 @ouah
//v
int a[30][30];
...
printf("%uX%d",a[x][y],(y+1));
// ^
要打印没有 "sign" 的签名 int
并使用 INT_MIN ... INT_MAX
的整个范围,有多种方法:
放弃
INT_MIN
并使用abs()
@Keith Thompsonprintf("%d", abs(x)); // fails for 2's complement INT_MIN
转换为更宽的整数。当更宽的整数不可用时失败 - 罕见。
printf("%lld", llabs((long long) x));
转换为对应的
unsigned
。在unsigned
正范围与int
正范围相同的稀有机器上可能会遇到麻烦。unsigned u = (unsigned) i; if (i < 0) u = UINT_MAX - u; printf("%u", u);
分别打印数字
int msdigits = i/10; int lsdigit = i%10; if (msdigits) { printf("%d", abs(msdigits)); } printf("%d", abs(lsdigit));