저번 질문때 너무 잘 가르쳐 주셔서 제 딴에는 많은 발전이 있었습니다. 정말 감사합니다..!!! 그런데 하다가 한 가지 질문이 생겨서 여쭤봅니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int m=0, n=0;
scanf("%d &d", &m, &n);
char** matrix = malloc(sizeof(char*) * m); // 세로 크기 메모리 할당
for (int i = 0; i < m; i++)
matrix[i] = malloc(sizeof(char) * n+1);//가로 크기 메모리 할당
for (int i = 0; i < m; i++)
{
scanf("%s", matrix[i]);// 배열 한 행 입력받기
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < m; j++)
{
int count = 0;
if (matrix[i][j] == '*') printf("*"); // * 표출
else if(matrix[i][j] == '.')
{
if (j > 0 && matrix[i][j - 1] == '*') count++; // 좌
if (j < n && matrix[i][j + 1] == '*') count++; // 우
if (i > 0 && matrix[i - 1][j] == '*') count++; // 상
if (i < m && matrix[i+1][j] == '*') count++; // 하
if (i > 0 && j > 0 && matrix[i - 1][j - 1] == '*') count++;// 상좌
if (i < m && j < n && matrix[i + 1][j + 1] == '*') count++;// 하우
if (i > 0 && j < n && matrix[i - 1][j + 1] == '*') count++;// 상우
if (i < m && j > 0 && matrix[i - 1][j + 1] == '*') count++;// 하좌
matrix[i][j] = count;
printf("%d", count);
}
}
printf("\n");
}
for (int i = 0; i < m; i++)
free(matrix[i]);
free(matrix);
return 0;
}
위와 같이 코드를 작성하고(사진도 첨부 하였습니다.)
5x5(세로x가로) 로 테스트 하였습니다.
근데 계속 입력 자체가 4x5 로 (4번째 줄 입력하면 바로 결과가 도출됩니다.) 되고 결과도 뭔가 잘려서 나와서 어디서 메모리를 놓친 건지 궁금해서 여쭤봅니다.
UNIT 6에서 디버거 사용법을 참고하시고,
VS 아래에 디버그창에서 자동이나 로컬 탭을 사용하면 됩니다.
예시를 입력해보면 n이 0입니다. m은 5입니다.
입력 이후 값을 바꾸지 않으니까 n은 값이 안 들어간 겁니다.
scanf 찾아보면 됩니다.
scanf("%d &d", &m, &n);
흔히 하는 실수입니다. 현업 전문가라는 건 대충 이런 실수를 다 겪어봤다는 뜻이죠.
칼을 쓰는 조각가, 요리사라면 칼에 손을 베이는 경험을 하게 됩니다. 안 할 수가 없죠. 뜨거운 조리 기구에 손이나 팔이 데이는 경험도 흔하고요.
의사도 오랜 수련 기간에 실수도 하면서 전문가로 성장하는 겁니다. 이렇게 설명하면 좀 무서워하던데, 그래서 3월엔 대학병원 가지 마라는 얘기가 있죠. 초보 의사와 초보 간호사의 첫 달이라고...;;
프로그래밍도 수많은 실수를 하면서 성장하는 겁니다. 실수는 당연한 겁니다. 성장하는 중이야! 라고 생각하세요. 근데 너무 오래 도전하지 말고 다음 단원까지 쭉 학습하고, 가끔 다시 풀어봐도 됩니다. 오히려 쉽게 풀리는 경우가 종종 있습니다. 뇌는 유능하니까요. 알아서 무의식 속에서 학습해옵니다. 새로운 지식을 학습하고, 기존 지식과 결합하면서 전에는 생각하지 못했던 해법을 떠올리게 될 때가 있습니다. 시야를 넓게 가지라는 얘기가 그런 의미입니다. 일단 진도를 나가세요. 가끔 다시 도전하고요.
늘 말하지만, 저자 아니고 사이트 관리자입니다. 디스코드에도 있으니 공지 참고하세요.