簡體   English   中英

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

要打印不帶“符號”的帶符號的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)); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM