用C显示骰子数

时间:2016-04-13 18:19:31

标签: c

我想首先显示所有骰子数字而不是仅显示第一个骰子的数量,但我认为它使用main()中的值d1。如果不使用globel变量我怎么能这样做?

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

void display_dice_value(int d1, int d2, int d3, int d4, int d5, int d6)
{
    d1=1+rand()%6;
    d2=1+rand()%6;
    d3=1+rand()%6;
    d4=1+rand()%6;
    d5=1+rand()%6;
    d6=1+rand()%6;
    printf("%d %d %d %d %d %d",d1,d2,d3,d4,d5,d6);
}


int main()
{
    srand(time(NULL));
    int d1,d2,d3,d4,d5,d6;
    display_dice_value(d1,d2,d3,d4,d5,d6);
    printf("\n%d",d1);
}

3 个答案:

答案 0 :(得分:1)

喜欢这个。如果值要回到Packages/Numpy中定义的变量,则函数参数必须是指针,main应该传递它们的地址。

main

节目输出:

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

void display_dice_value(int *d1, int *d2, int *d3, int *d4, int *d5, int *d6)
{
    *d1 = 1 + rand() % 6;
    *d2 = 1 + rand() % 6;
    *d3 = 1 + rand() % 6;
    *d4 = 1 + rand() % 6;
    *d5 = 1 + rand() % 6;
    *d6 = 1 + rand() % 6;
    printf("%d %d %d %d %d %d\n", *d1, *d2, *d3, *d4, *d5, *d6);
}

int main(void)
{
    int d1, d2, d3, d4, d5, d6;
    srand((unsigned)time(NULL));
    display_dice_value(&d1, &d2, &d3, &d4, &d5, &d6);
    printf("%d\n", d1);
    return 0;
}

答案 1 :(得分:1)

首先,您需要将指针传递给每个didisplay_dice_value函数:

void display_dice_value(int *d1, int *d2, int *d3, int *d4, int *d5, int *d6)
{
    *d1=1+rand()%6;
    *d2=1+rand()%6;
    ...
    printf("%d %d %d %d %d %d",*d1,*d2,*d3,*d4,*d5,*d6);
}


int main()
{
    ...
    int d1,d2,d3,d4,d5,d6;
    display_dice_value(&d1,&d2,&d3,&d4,&d5,&d6);
    ...
}

...然而

当你发现自己创建了一堆具有相同名称和尾随序号的变量时,这是一个很好的提示,你真的想要使用数组

void display_dice_value( int *d, size_t numdice )
{
  for ( size_t i = 0; i < numdice; i++ )
    d[i] = 1 + rand() % 6;

  for ( size_t i = 0; i < numdice; i++ )
    printf( "%d ", d[i]);
  putchar( '\n' );
}

int main( void )
{
   int dice[6];
   ...
   display_dice_value( dice, sizeof dice / sizeof *dice );
   printf( "dice[0] = %d\n", dice[0] );
   ...
}

<强> ETA

最后一点,您的display_dice_value功能不只是显示值;它生成值,这可能会造成混淆。最好有一个单独的函数来实际生成你的骰子值:

void generate_dice_values( int *d, size_t numdice )
{
  for ( size_t i = 0; i < numdice; i++ )
    d[i] = 1 = rand() % 6;
}

/**
 * For flexibility, write to any output stream
 */
void display_dice_values( FILE * stream, int *d, size_t numdice )
{
  char *sep = "";
  fputc( '[', stream );
  for ( size_t i = 0; i < numdice; i++ )
    fprintf( stream, "%s%d", sep, d[i] );
  fputc( ']', stream );
}

int main( void )
{
  int dice[6];
  generate_dice_values( dice, sizeof dice / sizeof *dice );
  printf( "6 dice rolls: " );
  display_dice_values( stdout, dice, sizeof dice / sizeof *dice );
  putchar( '\n' );
  printf( "d[0] = %d\n", d[0] );
  return 0;
}

答案 2 :(得分:1)

我建议和@haccks一样,但是将变量声明为box[{}]而不是int d1,然后传递指针:int *d1。我认为另一种方式会给你分段错误。

我知道这属于答案的评论,但我还不能评论,抱歉。