2

誰もこのプログラムで助けることができますか?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
    srand(time(NULL));
    int r = rand();
    int op = 0;
    while(0==0){
        printf("Enter a value\n ");
        scanf("%i\n",&op);

        if (op == r ){
            printf("yes");
            break;  
        }

        else if( op<r)
            printf("Your guess is lower than the number");
        else
            printf("Your guess is higher than the number");
    }
    printf("%i",r);
    return 0;
}    

「ターミナル」でプログラムを試すと、結果は常に次のようになります。あなたの推測は数値よりも低いです

何が起こっているのかわからない?しかし、Windowsでコードブロックを使用すると完璧に思えます。

この問題はLinuxまたはコンパイラからのものですか

ターミナルで cc main.c を書き、次に「./a.out」と書きました

4

4 に答える 4

2

rand()までの数値を返しRAND_MAXます。この値はプラットフォームに依存します。

Windows で Visual C++ を使用RAND_MAXすると、32767 になります。ただし、Linux で GNU C ライブラリを使用すると、2147483647 になります。したがって、推測できる数値の範囲がはるかに大きくなります。おそらくこれが、Windows ではなく Linux では小さすぎる数値を常に推測する理由です。

2147483647 はintgcc を使用した の可能な最大値であるため、それより高い値を推測しても正しい結果が得られないことに注意してください。推測が に収まらないためですop

他の人が言ったように、の値をrプラットフォームに依存しない値に制限する必要がありますrand() % 100

于 2012-07-22T15:32:56.470 に答える
1

の値rが非常に大きくなる可能性があるようです。なぜ Windows でうまく動作するのかわかりませんが、何度も試してみましたか? 運が良かったのかもしれませんが、予想よりも少ない数値が生成された可能性があります。実行して印刷したところ、値はr = 1262702361で、かなり大きいです。

値を 1 から 100 の範囲に保つには、mod 演算子を使用します。のようなものは、 r = r%100r を 1 ~ 100 の範囲に制限します。

于 2012-07-22T15:33:26.690 に答える
1

次のようなものを使用して、 r が属することができる範囲を制限する必要があると思います。

 r = rand() % 100;//r will be between 0 and 99 
于 2012-07-22T15:34:20.627 に答える
0

rand0との間の疑似乱数整数を返しますが、大きな数値になる可能性があります (私の GNU/Linux では 2147483647) RAND_MAXRAND_MAXモジュロ演算 ( %operator) を実行する必要があります。

これを確認するにはr、端末に の値を出力する必要があります。

于 2012-07-22T15:34:33.947 に答える