重複の可能性:
C /C++で整数のオーバーフローを検出するための最良の方法
私はCプログラミングの初心者long int
で、一度に1バイトずつ読み取り、空白の最後に印刷するプログラムを作成しました。LONG_MAX
ライブラリを使用して、およびライブラリLONG_MIN
内でオーバーフロー/アンダーフローをキャッチするように構成する必要がありますlimits.h
。より高い値までキャストすることは許可されていませlong int
ん。また、負の数のオーバーフローも検出する必要があります。これが私のコードです:
int main(void)
{
int c;
int state;
long int num = 0;
while((c = getchar()) != EOF)
{
switch(state)
{
case 0:
{
if (isspace(c))
{
//do nothing;
}
else
{
state = 1;
num = 10 * num + (c - '0');
}
break;
}
case 1:
{
if (isspace(c))
{
printf("%ld\n", num);
num = 0;
state = 0;
break;
}
num = 10 * num + (c - '0');
if (num < LONG_MIN || num > LONG_MAX)
{
printf("overflow\n");
break;
}
break;
}
}
}
return 0;
}
たとえば、入力が+1の場合、オーバーフローしてオーバーフローし、アンダーフローするとその逆になるif (num < LONG_MIN || num > LONG_MAX)
ため、機能していないように見える部分。LONG_MAX
LONG_MIN