我想首先显示所有骰子数字而不是仅显示第一个骰子的数量,但我认为它使用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);
}
答案 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)
首先,您需要将指针传递给每个di
到display_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
。我认为另一种方式会给你分段错误。
我知道这属于答案的评论,但我还不能评论,抱歉。