Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 指针数组游戏不知道如何将指针移到后面_C_Arrays_Pointers - Fatal编程技术网

C 指针数组游戏不知道如何将指针移到后面

C 指针数组游戏不知道如何将指针移到后面,c,arrays,pointers,C,Arrays,Pointers,有一个游戏,这个程序需要玩X-boom,它应该在每个回合中取出X玩家并将其放在阵列的后面,然后缩短阵列,使其不再是该功能的一部分。比如说 玩家1234,游戏的x是3 剩余球员:1 2 4 剩余球员:14人 剩余球员:1人 我做了这个代码,我认为应该这样做,但我不知道为什么它不能正常工作 我有一张关于输出应该是什么样子的照片,但我不知道如何在这里分享。如果有人知道,请在评论中告诉我 我的问题主要在于播放函数,注意数组中的3号被踢了,你应该继续从3号开始播放,只是那里会有一个新指针 我试着解决这个问

有一个游戏,这个程序需要玩X-boom,它应该在每个回合中取出X玩家并将其放在阵列的后面,然后缩短阵列,使其不再是该功能的一部分。比如说

玩家1234,游戏的x是3

剩余球员:1 2 4

剩余球员:14人

剩余球员: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);
void get\u boom\u编号(int*i){
printf(“输入动臂编号\n”);
scanf(“%d”,i);
回来
}
#定义长度31
无效播放(字符*玩家[],整数长度,整数boomnum){
整数计数=-1;
计数=(计数+boomnum-1)%(长度);
字符*温度;

对于(int i=0;i代码的一个问题是,如果
boomnum
数字为例如1,则
count
将变为负值。我不明白为什么
count
初始化为-1,以及为什么在重新计算
count
时再减去1。您的代码与:

int count = (boomnum-2)%(length);
同样,减去2似乎很奇怪。无论如何,你必须检查结果是否为负

另一个问题是:

    count=(count+boomnum-1)%(length);
    length=length-1;
这可能会导致下一次迭代中的
count
等于
length
。我想这不是您想要的。您需要交换两行以避免出现这种情况。例如:

    length=length-1;
    count=(count+boomnum-1)%(length);
执行此操作并为
boom_编号
输入2,结果如下:

Remy 13 Hadley
(顺便说一句,名字很奇怪)

我也会改变:

for (int i = 0; i<30; i++) {
硬编码循环的数量是个坏主意

此外,这一行:

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

这也是一个问题。如果
boomnum
为零,则可能再次导致
count
变为负值。

请注意,对于任何指针或数组
p
和索引
i
,表达式
*(p+i)
p[i]
完全相等。后者(
p[i]
)通常更易于阅读和理解(还有一对夫妇或更少的字符写)当你做“<代码> *(玩家+开始)时,请考虑这一点。
。啊,好吧。我以前听说过这样的赋值,但我认为添加这样的要求是愚蠢的。变量
players
是指针,你选择什么语法来解引用应该无关紧要。指针解引用就是指针解引用。是的,我知道,如果你们中有人想使用这种形式的wr如果你的解决方案没有问题,我不在乎,这只是我的老师,因为数组的大小是31,剩下一个玩家需要30次轮换。有固定数量的玩家是个坏主意。代码应该会自动找出什么时候只剩下一个玩家!老实说,我真的被这个代码弄糊涂了,如果你如果你能告诉我什么能起作用,那就太好了
count=(count+boomnum-1)%(length);