[英]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
的整個范圍,可以采用多種方法:
放棄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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.