int main() {
int m, n;
scanf_s("%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 < n;j++) {
if (matrix[i][j] == "*")
continue;
else if (matrix[i][j] == ".")
matrix[i][j] = 0;
}
for (int i = 0;i < m;i++) {
for (int j = 0; j < n; j++) {
printf("%d", matrix[i][j]);
}
printf("\n");
}
for (int i = 0; i < m; i++) {
free(matrix[i]);
}
free(m);
return 0;
}
하는 중에
일단 *는 그대로 나오고 .대신에 0으로 나오게 하려고 짠건데
안나오네요
왜 그런걸까요?
코드를 디버깅해드리거나 분석하는 것은 하지 않습니다.
코딩 도장은 순차학습을 전제로 되어 있습니다. 중도 학습자는 각자의 배경 지식 수준에 따라 이해도가 다르게 됩니다. 이는 바람직하지 않습니다.
값의 상태를 추적하는 방법에 대해서는
UNIT 6 디버거 사용하기를 참고하시고,
UNIT 38.8에 대해서는 포럼 상단에서 38.8로 검색하면 이전 질문과 답변을 참고할 수 있습니다.
int main() {
int m, n;
scanf("%d %d", &m, &n);
char** matrix = malloc(sizeof(char*) * m);
for (int i = 0; i < m; i++)
matrix[i] = (char*)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 < n;j++) {
if (matrix[i][j] == '*')
continue;
else if (matrix[i][j] == '.')
matrix[i][j] = 0;
}
for (int i = 0;i < m;i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == '*')
printf("%c", matrix[i][j]);
else if (matrix[i][j] == 0)
printf("%d", matrix[i][j]);
}
printf("\n");
}
for (int i = 0; i < m; i++) {
free(matrix[i]);
}
free(matrix);
return 0;
}
그래도 다행히 여기까진 했습니다
이젠 0에 *에 따라 1씩 더하게끔만 하면 되겠네요....
생각보다 너무 어려워서 여기서 엄청 헤매고 있습니다
그래도 풀 수는 있을것 같습니다
문의한 코드는 삭제합니다.
힌트 보고 푼다고 끝까지 풀었는데
5 5
*....
.*.**
.*...
.....
.....
*1000
1*1**
1*322
11100
00000
이렇게 나오네요
그래서
else if (matrix[i][j] == '*') {
요 문장에 중단점을 설정해서 디버깅을 돌렵니까
i와 j가 1,1일 때
y가0이고 x가 1일때 *가 아니니까 +1을 해줘야 하는데
실제로는 들어가지 않고 그냥 넘어가는 현상이 발생했습니다
왜 이러는 걸까요?
(도장_ 관리자님이 수정함 - 원문 제출일: 2019년 10월 1일, 화요일, 오후 9:23)
캡처에서 중단점 위치 잘 보시고, F5로 디버깅 실행해서 보면 됩니다.
조사식을 캡처와 같이 추가해서
i = 1, j = 1이고
y = 0, x = 1인 상태를 보면 됩니다.
matrix[y][x] = matrix[0][1] = 1
matrix[i][j] = matrix[1][1] = '*'
계속 돌려서 결과를 보면 2가 잘 들어간 것을 알 수 있습니다.
조사식에 matrix[0][1]을 추가해서 보면 값은 2로 잘 들어가 있고,
출력만 1인 것을 알 수 있습니다.
행렬 전체를 검토해서 결과를 구하고,
출력하는 반복문을 별도로 작성해야 합니다.
디버거로 돌려보면 왜 행렬에는 2가 들어 있고, 출력은 1이 되는지 알 수 있습니다.