能力评分函数C的随机输出

能力评分函数C的随机输出,c,C,我正在编写的代码看起来不错,没有编译错误或分段错误,但它在输出文件中提供了完全随机的数字 int reroll() { return rand() % 5 + 2; // range of 2-6 } int roll() { int i; int rolls[4]; int sum = 0, low = 6; for(i = 0; i < 4; i++) { rolls[i] = rand() % 6 + 1; // range of 1-6 while(rol

我正在编写的代码看起来不错,没有编译错误或分段错误,但它在输出文件中提供了完全随机的数字

int reroll()
{
    return rand() % 5 + 2; // range of 2-6
}

int roll()
{
int i;
int rolls[4];
int sum = 0, low = 6;
for(i = 0; i < 4; i++)
{
    rolls[i] = rand() % 6 + 1; // range of 1-6
    while(rolls[i] == 1)
    {
        rolls[i] = reroll();
    }
}

for (i = 0; i < 4; i++)
{
    if (low > rolls[i])
        low = rolls[i];
}

for (i = 0; i < 4; i++)
{
    sum += rolls[i];
}

sum = sum - low;

return sum;
}

void abScores()
{
int i, j, choice, abSc[6], abil[6];
char abS[6][5] = {"Str", "Dex", "Con", "Int", "Wis", "Cha"};
FILE *fp;
FILE *fo;
fp = fopen("csheet.txt", "a");
fo = fopen("att.txt", "r");

printf("Would you like your own ability scores, or the basic ability scores?\n");
printf("1 for own, 2 for basic\n");
scanf("%d", &choice);

if (choice == 1)
{
    for (i = 0; i < 6; i++)
    {
        abSc[i] = roll();
        printf("Ability score %d: %d\n", i+1, abSc[i]);
    }
}
else if (choice == 2)
{
    abSc[0] = 15;
    abSc[1] = 14;
    abSc[2] = 13;
    abSc[3] = 12;
    abSc[4] = 10;
    abSc[5] = 8;
    for (i = 0; i < 6; i++)
        printf("Ability score %d: %d\n", i+1, abSc[i]);
}

for (i = 0; i < 6; i++)
{
    printf("What score would you like for %s?\nPlease use each score only once.\n", abS[i]);
    for (j = 0; j < 6; j++)
    {
        printf("%2d\n", abSc[j]);
    }
    scanf("%d", &abil[j]);
    system("cls");
}

for (i = 0; i < 6; i++)
    fprintf(fp, "%s: %d\n", abS[i], abil[i]);
}
int-reroll()
{
返回rand()%5+2;//范围为2-6
}
int roll()
{
int i;
int rolls[4];
整数和=0,低=6;
对于(i=0;i<4;i++)
{
rolls[i]=rand()%6+1;//范围为1-6
while(滚动[i]==1)
{
滚动[i]=重新滚动();
}
}
对于(i=0;i<4;i++)
{
如果(低>转鼓[i])
低=转鼓[i];
}
对于(i=0;i<4;i++)
{
总和+=卷[i];
}
总和=总和-低;
回报金额;
}
void abScores()
{
inti,j,choice,abSc[6],abil[6];
字符abS[6][5]={“Str”、“Dex”、“Con”、“Int”、“Wis”、“Cha”};
文件*fp;
文件*fo;
fp=fopen(“csheet.txt”,“a”);
fo=fopen(“att.txt”、“r”);
printf(“您想要自己的能力分数还是基本能力分数?\n”);
printf(“1表示自己的,2表示基本的”);
scanf(“%d”,选择(&C);
如果(选项==1)
{
对于(i=0;i<6;i++)
{
abSc[i]=roll();
printf(“能力分数%d:%d\n”,i+1,abSc[i]);
}
}
else if(选项==2)
{
abSc[0]=15;
abSc[1]=14;
abSc[2]=13;
abSc[3]=12;
abSc[4]=10;
abSc[5]=8;
对于(i=0;i<6;i++)
printf(“能力分数%d:%d\n”,i+1,abSc[i]);
}
对于(i=0;i<6;i++)
{
printf(“您希望%s的分数是多少?\n请每个分数只使用一次。\n”,abS[i]);
对于(j=0;j<6;j++)
{
printf(“%2d\n”,abSc[j]);
}
scanf(“%d”和&abil[j]);
系统(“cls”);
}
对于(i=0;i<6;i++)
fprintf(fp,“%s:%d\n”,abS[i],abil[i]);
}

我正在尝试制作一个相当基本的D&D角色生成器,但是这个函数abScores给我带来的问题比其他11个函数加起来还要多。

什么是D&D角色生成器?龙与地下城角色生成器。race choice、class choice和background choice函数可以正常工作,但abScores函数是导致我出现问题的函数;这个2在那里做什么。其中两个是函数,当您将一些值扫描到数组时,它们现在可能会在函数结束后保留。如果要在之后保留它们,则应通过参数将它们传递给函数作为引用。此外,为了避免任何seg故障,在初始化诸如abSc[6]、ABL[6]等阵列时;为它们指定默认值,以便它们可以在编译器中打印。也不要忘记在处理完文件后关闭它们。以防其他人同时打开它们。好运气请使用调试器检查代码。如果您可以减少代码,该练习可能会帮助您找到问题。请阅读以下内容:。