如何在函数c中求和随机数?

时间:2017-09-30 13:11:39

标签: c function sum

我想要做的是总结在sumDices()功能中打印的随机骰子,但我不知道该怎么做,有人可以帮助我吗?

这就是我的代码的样子:

void printDices() {
    int i = 0;
    int total = 0;

    char one[3][3] = { { ' ',' ','\n' },{ ' ','*','\n' },{ ' ',' ','\0' } };
    char two[3][4] = { { '*',' ',' ','\n' },{ ' ',' ',' ','\n' },{ ' ',' ','*','\0' } };
    char three[3][4] = { { '*',' ',' ','\n' },{ ' ','*',' ','\n', },{ ' ',' ','*','\0' } };
    char four[3][4] = { { '*',' ','*','\n' },{ ' ',' ',' ','\n' },{ '*',' ','*','\0' } };
    char five[3][4] = { { '*',' ','*','\n' },{ ' ','*',' ','\n' },{ '*',' ','*','\0' } };
    char six[3][4] = { { '*',' ','*','\n' },{ '*',' ','*','\n' },{ '*',' ','*','\0' } };

    for (i = 0; i < 5; i++)
    {
        switch (rand() % 5) {
            case 0: printf("%s\n", one); break;
            case 1: printf("\n%s\n", two); break;
            case 2: printf("\n%s\n", three); break;
            case 3: printf("\n%s\n", four); break;
            case 4: printf("\n%s\n", five); break;
            case 5: printf("\n%s\n", six); break;
        }
    }
}

int sumDices() {
    return 0;
}

int main(void) {
    printDices();
    srand(time(0));
    sumDices();
    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您可以使这些字符数组像

一样
char one[3][3] = { { ' ',' ','\n' },{ ' ','*','\n' },{ ' ',' ','\0' } };

char one[3][3] = {"  \n", " *\n", "  \0"};

增强可读性。如here所述,写出数组边界似乎不是问题。

您可以创建变量sum来查找随机数之和,如

int sum=0, n;
for (i = 0; i < 5; i++)
{
    n=rand()%5;
    sum+=n;
    switch (n) {
        case 0: printf("%s\n", one); break;
        case 1: printf("\n%s\n", two); break;
        case 2: printf("\n%s\n", three); break;
        case 3: printf("\n%s\n", four); break;
        case 4: printf("\n%s\n", five); break;
        case 5: printf("\n%s\n", six); break;
    }
}
return sum;

为此,您需要将printDice()函数的返回类型设为int,如

int printDices()

要获取printDices()sumDices()返回的值,请在printDices()中致电sumDices()

在循环中,您打印的值比使用rand()得到的随机数大1。也许您需要这些值的总和。在这种情况下,你可以做

for (i = 0; i < 5; i++)
{
    n=rand()%5+1;
    sum+=n;
    switch (n) {
        case 1: printf("%s\n", one); break;
        case 2: printf("\n%s\n", two); break;
        case 3: printf("\n%s\n", three); break;
        case 4: printf("\n%s\n", four); break;
        case 5: printf("\n%s\n", five); break;
        case 6: printf("\n%s\n", six); break;
    }
}

即,1被添加到rand()返回的随机值中。这样,值就会介于16之间,包括printf()

编辑: 您正尝试使用switch()内的char one[]=" \n *\n \0"; 语句打印多维数组。 你必须逐个打印它们。

或者,正如@Steve指出的那样,将这些多维字符数组转换为1D数组,如

case 5:

正如Bathsheba所述,switch中的rand()%6永远不会到达。我认为您需要rand()%5而不是{{1}}。毕竟,模具有6个面孔。