为多个字符分配随机值

编程语言 2026-07-09

这些数值都输出为相同的值,我觉得原因在于它们在代码运行时被赋予了一个固定的值。我尝试使用if/else语句,但不知为何并没有改变。基本上,我想让这三个玩家的静态名单被随机分配一个奇数、偶数,或一个5 倍的数值,借此用d100来确定观看电影的顺序。我已经有一个d100的随机数发生器,只是这个东西我似乎搞不对。 如果你帮我纠正它,请解释我应该如何搜索,或者引导我找到正确的答案。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    const char *messages[] = {"ODD", "EVEN", "5X"};
        int num_messages = 3;

    char name1[10] = "Player1";
    char name2[10] = "Player2";
    char name3[10] = "Player3";

    srand(time(NULL));
    int randomIndex = rand() % num_messages;

    printf("%s\n", name1);
    printf("Result: %s\n", messages [randomIndex]);

    printf("%s\n", name2);
    printf("Result: %s\n", messages [randomIndex]);

    printf("%s\n", name3);
    printf("Result: %s\n", messages [randomIndex]);

    return 0;
}

解决方案

你只调用 rand() 一次,并将其结果用作所有玩家的索引。 因此所有玩家得到相同的消息 messages [randomIndex]

至少你需要调用 rand() 三次:为每个玩家各调用一次 rand(),以选择相应的消息。

如果你希望这组消息都以随机顺序被使用,那么你可以使用下面所示的做法,例如如下所示。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main( void )
{
    enum { N = 3 };

    const char * messages[N] = { "ODD", "EVEN", "5X" };
    int indices[N] = { 0, 1, 2 };

    const char *names[N] = { "Player1", "Player2", "Player3" };

    srand( ( unsigned int )time( NULL ) );

    for ( int i = 0; i < N; i++ )
    {
        int index1 = rand() % N; 
        int index2 = rand() % N;

        if ( index1 != index2 )
        {
            int tmp = indices[index1];
            indices[index1] = indices[index2];
            indices[index2] = tmp;
        }
    }


    for ( int i = 0; i < N; i++ )
    {
        printf( "%s: %s\n", names[i], messages[indices[i]] );
    }
}

程序的输出在不同的运行中可能如下所示。

  • Player1: EVEN Player2: 5X Player3: ODD
  • Player1: ODD Player2: 5X Player3: EVEN
  • Player1: 5X Player2: ODD Player3: EVEN

或者你也可以写一个单独的函数,比如

``` void shuffle( int indices[], int n ) { for ( int i = 0; i < n; i++ ) { int index1 = rand() % n; int index2 = rand() % n;

    if ( index1 != index2 )
    {
        int tmp = indices[index1];
        indices[index1] = indices[index2];
        indices[index2] = tmp;
    }
}

} ```

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章