C程序:如何设置自定义整数范围,严格限制该范围内的可接受输入数字?

时间:2013-01-29 07:04:56

标签: c int range limit

让我们考虑这样一种情况:程序必须将一个数字作为用户的输入,只能在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;
}

3 个答案:

答案 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"来签名或无符号值。

要检查输入是否有限制,您必须阅读输入,根据您的限制进行检查,如果在外面,则再次询问用户。