[問題] 關於大數放到小數中...

看板C_and_CPP (C/C++)作者 (paris)時間16年前 (2010/01/11 21:56), 編輯推噓1(107)
留言8則, 1人參與, 最新討論串1/1
目的是想要讓大的數放到小的數中時,顯示overflow 如果是在data type範圍內的,就可以正常顯示... #include<stdio.h> #include<stdlib.h> #include<limits.h> #include<assert.h> /* 撰寫程式時,要注意data type的強制轉換。 */ bool check(int bigInt); int main(void) { //int a=123456789; int a; short b; printf("input a number\n"); scanf("%d", &a); assert(a<2147483647); if(check(a)==true){ b=a; printf("%d\n",b); } else printf("overflow"); system("pause"); return 0; } bool check(int bigInt) { if(bigInt<=SHRT_MAX && bigInt >=SHRT_MIN) { return true; } else return false; } 其中有參考了 http://en.wikipedia.org/wiki/Limits.h 但現在問題在於...怎麼跑也不會跑到assert() 在使用者輸入時,若是輸入超過int的界限,就已經爆掉了 根本跑不下去... 不知道要怎麼設計成使用者輸入時就可以檢查界限範圍呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.52.56

01/11 22:23, , 1F
這樣說吧, 32 bit的int能表達的最大值就是 2147483647
01/11 22:23, 1F

01/11 22:23, , 2F
所以除了user輸入 2147483647 以外, 你的assert永遠都不
01/11 22:23, 2F

01/11 22:23, , 3F
會被trigger....@_@"
01/11 22:23, 3F

01/11 22:24, , 4F
相對的, 32 bit的int能表達的數值range就在那, 你用 %d
01/11 22:24, 4F

01/11 22:25, , 5F
加scanf, 理論上能讀入放進變數a的永遠也不可能overflow
01/11 22:25, 5F

01/11 22:26, , 6F
所以, 你要找一個值域比32 bit int大的儲存空間, 才能知
01/11 22:26, 6F

01/11 22:27, , 7F
道會不會overflow(在爆掉前); int64或是string都是可以
01/11 22:27, 7F

01/11 22:27, , 8F
利用的方式; 只是之後的處理你要自己評估要不要用大數@@
01/11 22:27, 8F
文章代碼(AID): #1BIouP8D (C_and_CPP)
文章代碼(AID): #1BIouP8D (C_and_CPP)