Код компилируется, но не печатается с использованием командной строки - PullRequest
0 голосов
/ 25 февраля 2020

Я действительно понятия не имею, почему это не скомпилируется. Некоторые отзывы будут оценены. Если возможно, я бы просто хотел дать небольшой намек или точку в правильном направлении, вместо того, чтобы дать мне ответ. Большое спасибо, ребята.

Назначение этого кода следующее:

  • . / A.out RS
    • R - количество рулонов
    • S - это семя для srand
    • , если не предоставлено, R равно 30 S, равно 13
    • , может дополнять R & S, R, нет
  • бросьте 2 кубика; частота суммы 2 значений
  • использовать 11 односторонних костей
  • вывод должен быть хорошо отформатирован и информативен
#include <stdio.h>
#include <stdlib.h>

int main( int argc, int argv[] )
{
    int dice1, dice2, sum;
    int R, S, k, g, j, x, count = 0;
    int list[22];
    int nums[22] = {0};

    for( j = 2; j < 23; j++ )
    {
        list[j] = j;
    }

    if( argc != 3 )
    {
        R = 30;
        S = 13;
    }
    else
    {
        R = argv[1];
        S = argv[2];
    }

    srand( S );

    for( k = R; k > 0; k-- )
    {
        dice1 = rand() % 11 + 1;
        dice2 = rand() % 11 + 1;

        sum = (dice1 + dice2);
        for( g = 2; g < 23; g )
        {
            if( sum == list[g] )
            {
                nums[count] += 1;
                count++;
            }
        }
    }

    count = 0;

    for( x = 2; x < 23; x++ )
    {
        printf("Frequency of %d: %d\n", x, nums[count]);
        count++;
    }

    return 0;
}

1 Ответ

0 голосов
/ 26 февраля 2020

Вы должны быть в состоянии сделать это самостоятельно. Это больше, чем просто c. Проверьте комментарии.

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

int main( int argc, char* argv[] ) // argc is number of arguments, argv[][] is list of arguments that are strings
{
    int dice1, dice2, sum;
    int R, S, k, g, j, x, count = 0;
    int list[23]; // increase size of these arrays as you will go out of bounds
    int nums[23] = {0};

    for( j = 2; j < 23; j++ ) // j==22 is out of bounds, if you need j==22, increase `list' and `nums' size (above)
    {
        list[j] = j;
    }

    if( argc != 3 )
    {
        R = 30;
        S = 13;
    }
    else
    {
        R = atoi(argv[1]); // convert string to int
        S = atoi(argv[2]);
    }

    srand( S );

    for( k = R; k > 0; k-- )
    {
        dice1 = rand() % 11 + 1;
        dice2 = rand() % 11 + 1;

        sum = (dice1 + dice2);
        for( g = 2; g < 22; g++ ) // do something with g, like increment for example, as it's infinite loop
        {
            if( sum == list[g] )
            {
                nums[count] += 1;
                count++;
            }
        }
    }

    count = 0;

    for( x = 2; x < 23; x++ )
    {
        printf("Frequency of %d: %d\n", x, nums[count]);
        count++;
    }

    return 0;
}

Вот разница , которая, надеюсь, поможет вам увидеть разницу. Вы можете получить это самостоятельно с $ diff -rup rst1.c rst2.c > rst2.diff.

PS. Я думаю, что все комментарии были указаны в комментариях, так что вы должны показать каждому из них.

...