gpt4 book ai didi

c - printf 不打印 unsigned int

转载 作者:太空宇宙 更新时间:2023-11-04 02:42:43 25 4
gpt4 key购买 nike

我在打印无符号数字时遇到以下问题。这是发生了什么:当我在数组中输入一个负值然后尝试打印它时,我无法打印数字,但会打印其他数量。

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));
// ^

要打印不带“符号”的带符号 int 并使用 INT_MIN ... INT_MAX 的整个范围,有多种方法:

  1. 放弃 INT_MIN 并使用 abs() @Keith Thompson

    printf("%d", abs(x));  // fails for 2's complement INT_MIN
  2. 转换为更宽的整数。当更宽的整数不可用时失败 - 罕见。

    printf("%lld", llabs((long long) x));
  3. 转换为相应的unsigned。在 unsigned 正数范围与 int 正数范围相同的稀有机器上可能会遇到麻烦。

    unsigned u = (unsigned) i;
    if (i < 0) u = UINT_MAX - u;
    printf("%u", u);
  4. 分别打印数字

    int msdigits = i/10;
    int lsdigit = i%10;
    if (msdigits) {
    printf("%d", abs(msdigits));
    }
    printf("%d", abs(lsdigit));

关于c - printf 不打印 unsigned int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30201559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com