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