Массив указателя игры не уверен, как переместить указатели назад - PullRequest
0 голосов
/ 17 мая 2019

есть игра, в которой эта программа должна играть в X-boom, она должна вынимать х-игрока каждый ход и помещать его в конец массива, а затем укорачивать массив, чтобы он больше не был частью этогофункция.например

игрок 1 2 3 4, а x для игры - 3

осталось игроков: 1 2 4

осталось игроков: 1 4

осталось игроков: 1

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

У меня есть фотография того, как должен выглядеть вывод, но яНе знаю, как поделиться этим здесь, если кто-нибудь знает, пожалуйста, скажите мне в комментариях, моя проблема в основном связана с уведомлением о функции воспроизведения, что выбрано число 3 в массиве, вы должны продолжать играть с номера 3 только, что будеттам появился новый указатель

Я попытался решить эту проблему, просто перейдя к тому, который нужно отбросить, и сделав перестановку, чтобы он вернулся, переместив всех остальных вперед, а затем сократив массив на 1

в конце главная функция напечатает массив, и это должно быть так, чтобы первый игрок, которого пнули, был последним в массиве

void get_boom_number(int * i){
    printf("enter the boom number\n");
    scanf("%d",i);
    return ;
}
#define LENGTH 31

void play(char * players[],int length,int boomnum){
    int count=-1;
     count = (count+boomnum-1)%(length);
    char * temp;
    for (int i = 0; i<30; i++) {
        printf("%d\n",count);
        for (int start=count; start<length-1; start++) {
            temp=*(players+start);
            *(players+start)=*(players+start+1);
            *(players+start+1)=temp;
        }
        count=(count+boomnum-1)%(length);
        length=length-1;
    }
    return ;
}
int main()
{
    char * players[LENGTH]={"Tyrion Lannister","Daenerys Targaryen","Jon Snow","Arya Stark","Theon Greyjoy", "Joffrey Baratheon","Khal Drogo","Ted Mosby","Marshall Eriksen","Robin Scherbatsky","Barney Stinson", "Lily Aldrin", "Tracy McConnell", "Ted Mosby", "Leonard Hofstadter","Sheldon Cooper", "Penny", "Howard Wolowitz", "Raj Koothrappali", "Bernadette Rostenkowski-Wolowitz","Amy Farrah Fowler", "Gregory House", "Lisa Cuddy", "James Wilson","Eric Foreman", "Allison Cameron", "Robert Chase" ,"Lawrence Kutner", "Chris Taub","Remy 13 Hadley", "Amber Volakis"};
    int boom_number, i;
    get_boom_number(&boom_number);
    play(players,LENGTH,boom_number);

, а затем просто печаталмассив также не разрешается использовать "[]" для дырки.

1 Ответ

1 голос
/ 17 мая 2019

Проблема с вашим кодом состоит в том, что count станет отрицательным, если число boomnum, например, равно 1. Я не понимаю, почему count инициализируется в -1 и почему вы вычитаете еще 1 при пересчете count.Ваш код такой же как:

int count = (boomnum-2)%(length);

Опять кажется странным вычитать 2. В любом случае, вы должны проверить, что результат не отрицательный.

Другая проблема заключается в следующем:

    count=(count+boomnum-1)%(length);
    length=length-1;

Это может привести к тому, что count будет равно length на следующей итерации.Я думаю, это не то, что вы хотите.Вам нужно поменять две строки, чтобы избежать этого.Как:

    length=length-1;
    count=(count+boomnum-1)%(length);

Выполнение этого и ввод 2 для boom_number приводит к результату:

Remy 13 Hadley

(кстати, странное имя).

Я бытакже измените:

for (int i = 0; i<30; i++) {

на

while(length > 1) {

Неправильно кодировать количество циклов.

Далее, эта строка:

count=(count+boomnum-1)%(length);

тоже проблема.Если boomnum равно нулю, это может снова вызвать отрицательное значение count.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...