如何在 xCode for iPhone 中生成 3 位随机数

How to generate a 3-digit random number in xCode for iPhone

本文关键字:随机数 iPhone xCode for      更新时间:2023-10-16

问题是我需要使用这样的代码,但它不适用于char变量。你能帮我写代码,或者展示我们如何用数组来做到这一点吗?

法典:

char numeroMaquina[0] = arc4random() % 9;
switch(numeroMaquina[0]) {
        case 0:
            numeroMaquina[0] = 1;
            break;
        case 1:
            numeroMaquina[0] = 2;
            break;
        case 2:
            numeroMaquina[0] = 3;
            break;
        case 3:
            numeroMaquina[0] = 4;
            break;
        case 4:
            numeroMaquina[0] = 5;
            break;
        case 5:
            numeroMaquina[0] = 6;
            break;
        case 6:
            numeroMaquina[0] = 7;
            break;
        case 7:
            numeroMaquina[0] = 8;
            break;
        case 8:
            numeroMaquina[0] = 9;
            break;
    }
    int numeroMaquina2 = arc4random() % 9;
    switch(numeroMaquina2) {
        case 0:
            numeroMaquina2 = 1;
            break;
        case 1:
            numeroMaquina2 = 2;
            break;
        case 2:
            numeroMaquina2 = 3;
            break;
        case 3:
            numeroMaquina2 = 4;
            break;
        case 4:
            numeroMaquina2 = 5;
            break;
        case 5:
            numeroMaquina2 = 6;
            break;
        case 6:
            numeroMaquina2 = 7;
            break;
        case 7:
            numeroMaquina2 = 8;
            break;
        case 8:
            numeroMaquina2 = 9;
            break;
    }

    int numeroMaquina3 = arc4random() % 9;
    switch(numeroMaquina3) {
        case 0:
            numeroMaquina3 = 1;
            break;
        case 1:
            numeroMaquina3 = 2;
            break;
        case 2:
            numeroMaquina3 = 3;
            break;
        case 3:
            numeroMaquina3 = 4;
            break;
        case 4:
            numeroMaquina3 = 5;
            break;
        case 5:
            numeroMaquina3 = 6;
            break;
        case 6:
            numeroMaquina3 = 7;
            break;
        case 7:
            numeroMaquina3 = 8;
            break;
        case 8:
            numeroMaquina3 = 9;
            break;
    }

这看起来像是有人通过单词获得报酬的代码。总而言之,您的代码似乎相当于:

char NumeroMaquina[3];
for (int i=0; i<3; i++)
   NumerMaquina[i] = arc4random() % 9 + 1;

我不确定你到底想完成什么。也许你真的希望它是

NumeroMaquina[i] = arc4random() % 9 + '1';

所以数组中的每个元素都是可打印的数字吗?

如果(如标题所示)您只需要一个三位随机数,那么使用以下内容可能更容易:

int number = arc4random() % 1000;

编辑:为了防止得到0,你应该使用:

int number = arc4random() % 999 + 1;

。如果你想用一串字符来转换它,你可以用sprintf来转换它(例如):

char as_string[4];
sprintf(as_string, "%3d", number);
int myNumber = arc4Random()%899 + 100;

这将为您提供一个介于 100 和 999 之间的随机数。

我认为iPhone支持C++11/libc ++,所以:

如果你想要3个非零数字,你可以这样做:

#include <random>
int main() {
    std::random_device r;
    std::seed_seq seed{r(), r(), r(), r(), r(), r(), r(), r()};
    std::mt19937 engine(seed);
    char digits[4] = {};
    std::generate(std::begin(digits),std::end(digits)-1,
      std::bind(std::uniform_int_distribution<char>('1','9'),std::ref(engine)));
}

或者也许

int n = std::uniform_int_distribution<int>(0,9*9*9-1)(engine); // 3 digit number in base 9
char digits[4] = {n/9/9%9 + '1',n/9%9 + '1', n%9 + '1'}; // don't use '0' as a digit symbol