看板 C_and_CPP 關於我們 聯絡資訊
目的是想要讓大的數放到小的數中時,顯示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
VictorTom:這樣說吧, 32 bit的int能表達的最大值就是 2147483647 01/11 22:23
VictorTom:所以除了user輸入 2147483647 以外, 你的assert永遠都不 01/11 22:23
VictorTom:會被trigger....@_@" 01/11 22:23
VictorTom:相對的, 32 bit的int能表達的數值range就在那, 你用 %d 01/11 22:24
VictorTom:加scanf, 理論上能讀入放進變數a的永遠也不可能overflow 01/11 22:25
VictorTom:所以, 你要找一個值域比32 bit int大的儲存空間, 才能知 01/11 22:26
VictorTom:道會不會overflow(在爆掉前); int64或是string都是可以 01/11 22:27
VictorTom:利用的方式; 只是之後的處理你要自己評估要不要用大數@@ 01/11 22:27