我正在输入一个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
答案 0 :(得分:2)
似乎37482637462大于int
可以在您的平台上保存的内容。由于整数溢出,最终会出现负数。
如果unsigned int
可以在您的平台上保存该号码,则可以尝试unsigned int
使用它。如果没有,您将得到未定义的行为。