|
以前ここの掲示板でヒントをいただいた者です。
2つの値の絶対値を表示するプログラムを作成していたのですが、このプログラムでint型で表現できない大きな値が入力されるとオーバーフローが発生してしまいます。
どなたか解決方法を授けて下さると幸いです。
ソースは以下のようになります。
#include <stdio.h>
#include <stdlib.h>
int absolute(int n1, int n2);
int get_int(void)
{
char buf[256], c;
int n;
if (!fgets(buf, sizeof buf, stdin) || sscanf(buf, "%d %c", &n, &c) != 1)
puts("error!!"), exit(1);
/*n1、n2に対応する数値を入力
n1、n2に対し整数以外、-のみ、改行のみが入力された場合は
「error!!」を表示*/
return n;
}
int main(void)
{
int n1;
int n2;
n1 = get_int();
n2 = get_int();
while(n1 >= 100000000){
n1 = n1 / 10;
/*n1の桁数が9桁以上ならば10で除算し8桁まで減らす*/
}
while(n2 >= 100000000){
n2 = n2 / 10;
/*n2の桁数が9桁以上ならば10で除算し8桁まで減らす*/
}
printf("absolute(n1, n2) = %d\n", absolute(n1, n2));
return 0;
}
int absolute(int n1, int n2)
{
return (n1 > n2) ? (n1 - n2) : (n2 - n1);
}
よろしくお願いいたします。
|