argv [] всегда возвращает одно и то же целое число - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь создать простую программу для игры в кости. Программа может быть запущена двумя способами: либо с помощью scanf(), чтобы получить количество костей, которое необходимо бросить, либо путем передачи количества костей, которое нужно бросить, в качестве аргумента.

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

#if !defined(CLOCK_MONOTONIC)
    #error CLOCK_MONOTONIC is not defined
#endif

int main(int argc, char *argv[]) {

    if (argc > 2){
        printf("\nExpected exactly one argument, received %d\n", argc);
        return 1;
    } else if (argc == 1){
        void Randomize() {

            struct timespec tmp;
            clock_gettime(CLOCK_MONOTONIC,&tmp);
            srand(tmp.tv_nsec);

        }

        int Random(int Max) {

            return ( rand() % Max)+ 1;

        }

        int amount;
        printf("Enter the amount of dice to roll: ");
        scanf( "%d", &amount );
        printf("\nYou entered: %d ", amount);
        printf("\n");
        Randomize();
        int i;
        int totals[6];
        for (i=1;i<=6;i++)
        totals[ i ]=0;
        for (i=0;i<amount;i++) {

            int d=Random(6) ;
            int total=d;
            totals[ total ]++;

        }

        for (i=1;i<=6;i++) {

            printf("%i %i\n\r",i,totals[ i ]) ;

        }
    } else {

        int amount = *argv[1];
        printf("Getting dice: %d\n", amount);
        void Randomize() {

            struct timespec tmp;
            clock_gettime(CLOCK_MONOTONIC,&tmp);
            srand(tmp.tv_nsec);

        }

        int Random(int Max) {

            return ( rand() % Max)+ 1;

        }

        Randomize();
        int i;
        int totals[6];
        for (i=1;i<=6;i++)
        totals[ i ]=0;
        for (i=0;i<amount;i++) {

            int d=Random(6) ;
            int total=d;
            totals[ total ]++;

        }

        for (i=1;i<=6;i++) {

            printf("%i %i\n\r",i,totals[ i ]) ;

        }
    }

    return 0;

}

Первый и Вторая часть кода работает как задумано. То есть, если анализируется более одного аргумента (в дополнение к самому имени программы), программа завершит работу с намеченным сообщением. Если не анализировать аргумент (в дополнение к самому имени программы), программа также работает как задумано.

Проблема связана с третьей частью кода, где я должен иметь возможность использовать ./a.out 123 для получения 123 случайная игра в кости Когда я пробую этот метод, я получаю:

Getting dice: 49
1 8
2 10
3 6
4 7
5 7
6 11

в качестве вывода, независимо от того, какой аргумент я передаю.

Почему 49 всегда указывается сумма, независимо от переданного аргумента, и Как я могу изменить программу, чтобы получить правильное целое число в качестве аргумента?

Редактировать: Форматирование x2

...