고쳐야 한다면 어느부분을 고쳐야 할까요?
int m, n;
int s = 0;
scanf("%d %d", &m, &n);
int arr[10][10];
int arr1[10][10];
for (int i = 0; i < m; i++)
{
scanf("%s", arr[i]);
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (arr[i][j] != '*')
{
for (int a = 0; a < 3; a++)
{
for (int b = 0; b < 3; b++)
{
if (arr[i - 1 + a][j - 1 + b] == '*')
{
s = s + 1;
}
}
}
arr1[i][j] = s;
s = 0;
}
else
{
arr1[i][j] = '*';
}
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
printf("%s", arr1[i][j]);
}
printf("\n");
}
printf로 출력할 때 자료형과 서식 지정자가 일치해야 합니다.
int는 %d입니다.
심사문제 해설을 보면
scanf로 변수 두 개에 행렬의 크기 m과 n을 저장합니다(이하 변수는 m, n). 그다음에 m, n을 이용하여 2차원 배열을 만들려면 이중 포인터에 메모리를 할당해야 합니다. 따라서 char **matrix = malloc(sizeof(char *) * m);와 같이 세로 공간(행)에 해당하는 메모리를 할당합니다. 그리고 m만큼 반복하면서 가로 공간(열)에 해당하는 메모리를 할당합니다. 이때 가로 공간에는 문자열이 저장되므로 NULL까지 들어갈 수 있도록 가로 크기 + 1(n + 1)크기만큼 메모리를 할당합니다('Unit 39 문자열 사용하기', 'Unit 40 입력 값을 문자열에 저장하기' 참조).이와 같은 내용이 있습니다.
int로 2차원 배열을 만들면... 그것도 해결 방법은 될 수 있지만,
scanf("%s", arr[i]);
이런 입력 자체가 안 될 겁니다.
컴파일러 오류 메시지를 잘 살펴보세요.
포럼 오른쪽 상단에 38.8을 입력해서 이전 질문과 답변을 살펴보세요.