对于一个简单的程序,分配是创建一个接受十位数电话号码的程序,然后将其读回给用户.需要进行控制以确保:
第一个数字不是0.
输入的数字是十个数字.
错误检查似乎很简单; 我想使用while循环来确保数字的范围在1000000000和9999999999之间可以解决,并且根据独立的计算,它似乎应该.
while ((MDN - valueCheck < 0) || (MDN > 9999999999)) {
printf("Entered number is not ten digits. Please re-enter.\n");
scanf("%d", &MDN);
}
Run Code Online (Sandbox Code Playgroud)
这两个MDN和valueCheck是long long类型变量(这样的范围内可以走过去2,147,483,647; IIRC很长很长为64位),但他们似乎仍然被列为32位整数,如进入2147483647出来就好了(或者更低的电话号码作品同样),但输入2,147,483,648(或以上任何内容)会使其显示为-2147483647.
与上述相关,输入一个更高的数字,不仅值环绕32位整数的范围,而且printf循环后语句打印的电话号码总是等于输入的数字减去两倍的限制32位整数.
是否有任何简单的方法使程序实际工作在64位数字,就像我想要的那样?如果我可以使数学正常工作,该算法似乎很可靠.
尝试scanf("%lld", &MDN);而不是scanf("%d", &MDN);
来自man scanf:
ll (ell ell)
Indicates that the conversion will be one of dioux or n and the
next pointer is a pointer to a long long int (rather than int).
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |