for 循环与一维数组相关问题

算了好几遍还是没有求出数组 C 的元素,可以确定是在循环这一块有问题但是不知道具体错在哪里,详细解答

img

第一个循环是给数组c[5]的元素进行加一操作,数组s[12]中的元素是c[5]中进行加一操作的元素下标。第一个循环结束才进行第二个循环,数组s[12]中1出现4次,那就对c[1]进行4次加一操作,所以结果是4,2出现3次就进行3次加一操作,所以c[2]等于3。

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7795450
  • 这篇博客也不错, 你可以看下【c语言】删去一个数组中所有相同的数,使之只剩一个,然后打印出此一维数组并且打印出数组个数
  • 除此之外, 这篇博客: 我是电脑玩家之打飞机游戏C语言数组法实现(高阶版)中的 这里我添加了血条值,还实现了飞机连续射子弹的功能,敌机也可以向下移动随机出现,使游戏更加真实,代码里我还添加了更多的注释,更加便于大家对代码的理解 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 效果如下:

    击杀Single敌机版(C代码实现)

    详细代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
    #include<windows.h>
    
    #define high 20				//游戏画面尺寸 
    #define width 36			//如果不把这两个变量设为符号常量而设为全局变量,编译器就会报错 
    							//至于为什么大家可以在评论区下讨论,我想看看大家对这个的想法
    							//问题:符号常量与全局变量有什么区别? 
    							//最后我会公布答案
    
    int x, y;					//飞机坐标 
    int enemy_x, enemy_y;		//敌机坐标		
    int score;					//得分 
    int life;					//飞机生命值 
    int canvas[high][width + 17] = {0};		//二维数组存储游戏画布中对应的元素
    										//1为飞机,2为子弹,3为敌机 
    										//width + 17 是为了保证飞机右翼不会超出右线
    										//而之后的enemy_y = rand() * 100 % width + 9;是
    										//为了保证敌机在左边线以右9个单位的距离
    										//这是间接的控制飞机左翼不超过左边界的方法 
    int digit(int s)
    {
    	int ne, t, bi;
    	ne = s;
    	int num = 0;
    	while(ne)
    	{
    		t = ne % 10;
    		ne /= 10;
    		num++;
    	}
    	return num;
    } 
    								 
    void startup()
    {
    	
    	x = high / 2;
    	y = width / 2;
    	canvas[x][y] = 1; 
    	enemy_x = 0;
    	enemy_y = y;
    	life = 3; 
    	canvas[enemy_x][enemy_y] = 3;
    	score = 0;
    }
    
    void gotoxy(int x, int y)			//将光标移动到(x,y)位置 
    {
    	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    	COORD pos;
    	pos.X = x;
    	pos.Y = y;
    	SetConsoleCursorPosition(handle, pos);
     } 
    
    void HideCursor()
    {
    	CONSOLE_CURSOR_INFO cursor_info = {1, 0};
    	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
    }
    
    
    void show()
    {
    	gotoxy(0, 0);
    	HideCursor();
    	int i, j;
    	
    	for(i = 0; i < high; i++)
    	{
    		for(j = 0; j < width + 17; j++)
    		{
    			if((i == x) && (j == y))
    			{
    				printf("*");
    			}	
    			else if((i == x + 1) && (j == y - 2))
    			{
    				printf(" * *");
    				j += 3;
    			}
    			else if((i == x + 2) && (j == y - 2))
    			{
    				printf("* * *");
    				j += 4;
    			}
    			else if((i == x + 3) && (j == y - 6))
    			{
    				printf("* * * * * * *");
    				j += 12;
    			}
    			else if((i == x + 4) && (j == y - 8))
    			{
    				printf("* * * * * * * * *");
    				j += 16;
    			}
    			else if((i == x + 5) && (j == y - 1))
    			{
    				printf("* * ");
    				j += 3;
    			}
    			else if(canvas[i][j] == 3)
    				printf("@");
    			else if(canvas[i][j] == 2)
    				printf("|");
    			else
    				printf(" ");
    		}
    		printf("#\n");
    	}
    	
    	printf("生命值:%d", life);
    	int space = digit(life);
    	if(space == 1)
    	{
    		for(i = 0; i < width + 8; i++)
    			printf(" ");
    	}
    	else
    	{
    		for(i = 0; i < width + 8 - (space - 1); i++)
    			printf(" ");
    	}
    	printf("#\n");
    	printf("得分:%d", score);
    	int space2 = digit(score);
    	if(space2 == 1)
    	{
    		for(i = 0; i < width + 9; i++)
    			printf(" ");
    	}
    	else
    	{
    		for(i = 0; i < width + 9 - (space2 - 1); i++)
    			printf(" ");
    	}
    	printf("#\n");
    	for(i = 0; i < width + 17; i++)
    		printf("#");
    }
    
    void updateWithoutInput()		//与用户输入无关的更新 
    {
    	int i, j;
    	for(i = 0; i < high; i++)
    	{
    		for(j = 0; j < width + 17; j++)
    		{
    			if(canvas[i][j] == 2)
    			{
    				if((i - 1 == enemy_x) && (j == enemy_y))
    				{
    					score++;			//得分 
    					canvas[enemy_x][enemy_y] = 0;		//敌机已被消灭 
    					enemy_x = 0;
    					enemy_y = rand() * 100 % width + 9;
    					canvas[enemy_x][enemy_y] = 3;		//产生敌机 
    					canvas[i][j] = 0;					//子弹消耗掉 
    				}
    				canvas[i][j] = 0;
    				if(i > 0)
    					canvas[i - 1][j] = 2;		//子弹向上移动 
    			}
    		}
    	}
    	if(enemy_x > high)		//防线被突破 
    	{
    		canvas[enemy_x][enemy_y] = 0;
    		enemy_x = 0;
    		enemy_y = rand() * 100 % width + 9;
    		canvas[enemy_x][enemy_y] = 3;
    		score--;			//减分 
    		life--;
    	}
    	
    	if(enemy_x >= x) 
    	{
    		life--;
    		score--;
    		if(life == 0)
    		{
    			printf("\n任务失败!!!\n");
    			system("pause");
    			exit(0);
    		}
    		canvas[enemy_x][enemy_y] = 0;
    		enemy_x = 0;
    		enemy_y = rand() * 100 % width + 9;
    		canvas[enemy_x][enemy_y] = 3;
    	}
    	
    	static int speed = 0;	//控制敌机下落速度 
    	if(speed < 10)
    		speed++;
    	if(speed == 10)
    	{
    		canvas[enemy_x][enemy_y] = 0; 
    		enemy_x++;
    		speed = 0;
    		canvas[enemy_x][enemy_y] = 3;
    	} 
    }
    
    void updateWithInput()		//与用户输入有关的更新 
    {
    	char input;
    	if(kbhit())
    	{
    		input = getch();
    		if(input == 'a')
    		{
    			canvas[x][y] = 0;
    			y--;
    			canvas[x][y] = 1;
    		} 
    			
    		if(input == 'd')
    		{
    			canvas[x][y] = 0;
    			y++;
    			canvas[x][y] = 1;
    		} 
    		if(input == 'w')
    		{
    			canvas[x][y] = 0;
    			x--;
    			canvas[x][y] = 1;
    		} 
    		if(input == 's')
    		{
    			canvas[x][y] = 0;
    			x++;
    			canvas[x][y] = 1;
    		} 
    		if(input == ' ')
    		{
    //			bullet_x = x - 1;
    //			bullet_y = y;
    			canvas[x - 1][y] = 2;
    		}
    	}
    }
    
    
    int main()
    {
    	startup();
    	while(1)
    	{
    		show();
    		updateWithoutInput();
    		updateWithInput();
    	}
    	return 0;
    }
    
  • 您还可以看一下 CSDN讲师老师的C语言精髓之编译过程视频教程课程中的 计算机的组成部分,栈内存的特点;画出内存图,引入指针的概念小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    对于问题:请问您在使用for循环计算一维数组C的元素时遇到了问题,但无法确定具体错误所在?您能否提供一下您当前写的for循环的代码以及数组C的定义和初始化过程,以方便更好地对问题进行解答和分析。谢谢!

    由于题目中未给出数组C的定义和初始化过程,因此无法提供具体的解决方案,请提供完整的代码和定义后再咨询,谢谢!