具有意外结果的模数项目

时间:2014-06-14 03:54:45

标签: c scanf modulo

我正在输入一个11位的UPC代码,并尝试将数字分开以分别处理它们。我无法弄清楚为什么我正确地解析了一个输入,而另一个输入具有完全随机的值。

代码:

int input, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, check_digit;

printf("Enter the UPC Code: ");
scanf("%d", &input);

n11 = input % 10;
input /= 10;
n10 = input % 10;
input /= 10;
n9 = input % 10;
input /= 10;
n8 = input % 10;
input /= 10;
n7 = input % 10;
input /= 10;
n6 = input % 10; 
input /= 10;
n5 = input % 10;
input /= 10;
n4 = input % 10;
input /= 10;
n3 = input % 10;
input /= 10;
n2 = input % 10;
input /= 10;
n1 = input % 10;

printf("%d%d%d%d%d%d%d%d%d%d%d\n\n", n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11);

return 0;

输入第二个值时我得到的是完全随机的负数。谁能弄清楚我做错了什么?

:Chapter_4 $ ./PP4.5 输入UPC代码:01234567891

01234567891

:Chapter_4 $ ./PP4.5 输入UPC代码:37482637462

0-1-1-7-20-6-8-20-2

1 个答案:

答案 0 :(得分:2)

似乎37482637462大于int可以在您的平台上保存的内容。由于整数溢出,最终会出现负数。

如果unsigned int可以在您的平台上保存该号码,则可以尝试unsigned int使用它。如果没有,您将得到未定义的行为。