-1

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

3 回答 3

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);
}
于 2013-01-29T07:08:01.817 回答
1

你的上限,一千万(一百亿),是一个很大的数字。它不适合 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");

以上显然不是一个完整的程序。

于 2013-01-29T09:08:16.523 回答
0

你不能。"%lu"无论如何都不是直接的,除了一个例外:通过使用无符号值和有符号的格式来允许有符号或无符号值"%ld"

要检查输入是否在限制范围内,您必须阅读输入,根据您的限制检查它,如果超出限制,则再次询问用户。

于 2013-01-29T07:06:56.083 回答