让我们考虑这样一种情况:程序必须将一个数字作为用户的输入,只能在1到10,00,000,000之间的任何严格范围内?在C中有可能吗?如果是的话,如果有人可以通过修改以下示例程序来解释这一点,那就太好了。
#include<stdio.h>
int main()
{
unsigned long int n, e1,e2,e3;
int counter;
for(counter=0; counter<10; counter++)
{
scanf("%ld",&n); // how to restrict this between 1 to 10,000,000,000?
e1=n/2;
e2=n/3;
e3=n/4;
if(e1+e2+e3<n)
{
printf("%ld\n",n);
}
else
printf("%ld\n",e1+e2+e3);
}
return 0;
}
答案 0 :(得分:1)
您可以替换:
scanf ("%ld",&n);
有类似的东西:
scanf ("%lu", &n);
while ((n < 1) || (n > 10 * 1000 * 1000 * 1000)) {
printf ("No! That won't do, try again!\n");
scanf ("%lu", &n);
}
答案 1 :(得分:1)
你的上限,10,000,000,000(一百亿),是一个相当大的数字。它不适合32位无符号整数,需要更大的值。
因此,既然您知道需要支持的实际数字,最好使用显式的64位数字(而不是希望系统的unsigned long long
足够大)。
这将需要C99:
#include <stdint.h>
uint64_t n;
if(scanf("%" PRIu64, &n) == 1)
{
if(n >= 1 && n <= UINT64_C(10000000000))
printf("Great, number accepted\n");
else
printf("Please enter a number in range 1..10000000000\n");
}
else
printf("Please enter a number.\n");
上面显然不是一个完整的程序。
答案 2 :(得分:0)
你不能。不是直接的,只有一个例外:允许使用有符号值的"%lu"
格式和有符号值的"%ld"
来签名或无符号值。
要检查输入是否有限制,您必须阅读输入,根据您的限制进行检查,如果在外面,则再次询问用户。