为多个字符分配随机值
这些数值都输出为相同的值,我觉得原因在于它们在代码运行时被赋予了一个固定的值。我尝试使用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: ODDPlayer1: ODD Player2: 5X Player3: EVENPlayer1: 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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。