Language: C

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

void Input(BOMB *);
void Output(BOMB *);
void explode(BOMB *);

typedef struct Bomb{
	int map[8][8];
} BOMB;

int main()
{
	int input_times, input_cnt;
	BOMB bomb[50];
	int x, y;
	
	/*Read input and process*/
	scanf("%d", &input_times);
	for(input_cnt = 0; input_cnt < input_times; input_cnt++){
		Input(bomb[input_cnt]);
		scanf("%d", x);
		scanf("%d", y);
		bomb[input_cnt].map[x - 1][y - 1] = 2;
		explode(&bomb[input_cnt]);
	}
	/*Output*/
	for(input_cnt = 0; input_cnt < input_times; input_cnt++){
		printf("Data %d:\n", input_cnt + 1);
		Output(&bomb[input_cnt]);
	}

	return 0;
} 

Input(BOMB *bomb_ptr)
{
	char dump;
	int x_cnt, y_cnt;
	dump = getchar();
	for(y_cnt = 0; y_cnt < 8; y_cnt++){
		dump = getchar();
		for(x_cnt = 0; x_cnt < 8; x_cnt++)
			bomb_ptr->map[x_cnt][x_cnt] = getchar() - 48;	/*ASCII table*/
	}
}

Output(BOMB *bomb_ptr)
{
	int x_cnt, y_cnt;
	for(y_cnt = 0; y_cnt < 8; y_cnt++)
	{
		for(x_cnt = 0; x_cnt < 8; x_cnt++)
			printf("%d", bomb_ptr->map[x_cnt][y_cnt]);
		printf("\n");
	}
}

void explode(BOMB *bomb_ptr)
{
	int x_cnt, y_cnt;
	int explode_cnt;
	for(y_cnt = 0; y_cnt < 8; y_cnt++)
		for(x_cnt = 0; x_cnt < 8; x_cnt++)
			/*Find exploded bomb and process*/
			if(bomb_ptr->map[x_cnt][y_cnt] == 2)
			{
				bomb_ptr->map[x_cnt][y_cnt] = 0;
				/*Left*/
				explode_cnt = 1;
				while((x_cnt - explode_cnt) >= 0 && explode_cnt <= 3)
				{
					if((bomb_ptr->map[x_cnt - explode_cnt][y_cnt]) == 1)
						(bomb_ptr->map[x_cnt - explode_cnt][y_cnt]) = 2;
					explode_cnt++;
				}
				/*Right*/
				explode_cnt = 1;
				while((x_cnt + explode_cnt) <= 7 && explode_cnt <= 3)
				{
					if((bomb_ptr->map[x_cnt + explode_cnt][y_cnt]) == 1)
						(bomb_ptr->map[x_cnt + explode_cnt][y_cnt]) = 2;
					explode_cnt++;
				}
				/*Down*/
				explode_cnt = 1;
				while((y_cnt - explode_cnt) >= 0 && explode_cnt <= 3)
				{
					if((bomb_ptr->map[x_cnt][y_cnt - explode_cnt]) == 1)
						(bomb_ptr->map[x_cnt][y_cnt - explode_cnt]) = 2;
					explode_cnt++;
				}
				/*Up*/
				explode_cnt = 1;
				while((y_cnt + explode_cnt) <= 7 && explode_cnt <= 3)
				{
					if((bomb_ptr->map[x_cnt][y_cnt + explode_cnt]) == 1)
						(bomb_ptr->map[x_cnt][y_cnt + explode_cnt]) = 2;
					explode_cnt++;
				}
				explode(bomb_ptr);
			}
}

Compiler output:
main.c:4:12: error: unknown type name 'BOMB'
    4 | void Input(BOMB *);
      |            ^~~~
main.c:5:13: error: unknown type name 'BOMB'
    5 | void Output(BOMB *);
      |             ^~~~
main.c:6:14: error: unknown type name 'BOMB'
    6 | void explode(BOMB *);
      |              ^~~~
main.c: In function 'main':
main.c:21:17: error: implicit declaration of function 'Input' [-Wimplicit-function-declaration]
   21 |                 Input(bomb[input_cnt]);
      |                 ^~~~~
main.c:25:17: error: implicit declaration of function 'explode' [-Wimplicit-function-declaration]
   25 |                 explode(&bomb[input_cnt]);
      |                 ^~~~~~~
main.c:30:17: error: implicit declaration of function 'Output' [-Wimplicit-function-declaration]
   30 |                 Output(&bomb[input_cnt]);
      |                 ^~~~~~
main.c: At top level:
main.c:36:1: error: return type defaults to 'int' [-Wimplicit-int]
   36 | Input(BOMB *bomb_ptr)
      | ^~~~~
main.c:48:1: error: return type defaults to 'int' [-Wimplicit-int]
   48 | Output(BOMB *bomb_ptr)
      | ^~~~~~
main.c:59:6: warning: conflicting types for 'explode'; have 'void(BOMB *)' {aka 'void(struct Bomb *)'}
   59 | void explode(BOMB *bomb_ptr)
      |      ^~~~~~~
main.c:25:17: note: previous implicit declaration of 'explode' with type 'void(BOMB *)' {aka 'void(struct Bomb *)'}
   25 |                 explode(&bomb[input_cnt]);
      |                 ^~~~~~~