我写的代码看起来很好,没有提供编译错误或分段错误,但它在输出文件中提供了完全随机的数字。
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]);
}
我试图制作一个相当基本的D&amp; D角色生成器,但是这个函数abScores比其他11个函数组合引起了更多的问题。