-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

上限の 100 億 (100 億) はかなり大きな数です。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"とにかく直接ではありませんが、例外が 1 つあります。符号なし値と符号付きの形式を使用して、符号付きまたは符号なしの値を許可します"%ld"

入力が制限内にあるかどうかを確認するには、入力を読み取り、制限に対してチェックし、範囲外の場合はユーザーに再度尋ねる必要があります。

于 2013-01-29T07:06:56.083 に答える