对于一个简单的程序,任务是创建一个接受十位电话号码的程序,然后将其读回给用户。必须进行控制以确保:
第一个数字不是 0。
输入的数字是十个数字。
错误检查似乎很简单;我认为使用 while 循环来确保数字的范围在 1000000000 和 9999999999 之间是可行的,并且根据独立计算,似乎应该如此。
while ((MDN - valueCheck < 0) || (MDN > 9999999999)) {
printf("Entered number is not ten digits. Please re-enter.\n");
scanf("%d", &MDN);
}
MDN
和都是valueCheck
类型long long
变量(因此范围可以超过 2,147,483,647;IIRC long long 是 64 位),但它们似乎仍被列为 32 位整数,因为输入2147483647
结果很好(或任何较低的电话号码都可以)也),但输入 2,147,483,648(或以上任何值)会导致它显示为-2147483647
.
与上述相关,输入一个更大的数字,不仅值会环绕 32 位整数的范围,而且printf
循环后语句打印的电话号码总是等于输入的数字减去 a 限制的两倍32 位整数。
有没有什么简单的方法可以让程序像我想要的那样在 64 位数字中实际运行?如果我能让数学正常工作,该算法似乎很可靠。