2차원 배열 구성하고 있는데, 어디서 틀린 걸까요??...

조회수 509회
#include <stdio.h>
#include <stdlib.h>  // RAND_MAX
#include <Windows.h> // GetTickCount()

double randomDouble(void);  //   

double randomDouble(void) 
{
  return (double) rand() / RAND_MAX;
}

int main(void) 
{
  // 난수 발생기 초기화
  srand(GetTickCount());

  int spin_state[10][10];
  int i,j ;

  for( i=0; i< 10; i++)
  {
    for(j=0; j<10 ; j++)
    {
        if(randomDouble() > 0.5)
        {
            spin_state[i][j] = -1;
        }
        else
        {
            spin_state[i][j] = 1;
        }
    }
  }

  printf(" %d ", spin_state[i][j]);
  return 0;
}


위와 같이 코드를 작성해봤는데요.

2차원 배열이 제대로 출력되는지 확인해보려고 하는데 어떤 숫자만 나오고

배열이 나오진 않더군요..

연구실 프로젝트 때문에 급하게 파이썬에서 C로 바꿔서 공부중인데 1단계도 통과를 못하고 있습니다.

도와주세요 고수님들 ㅠ.ㅠ...

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    배열은 잘 만들고 값 잘 넣으셨는데 출력을 제대로 안하신 것이 이유입니다.

    printf(" %d ", spin_state[i][j]);
    

    이 부분이 이상하다고 생각하셔야 합니다.
    ij는 이 시점에서 둘 다 10입니다.
    spin_state[i][j]spin_state[10][10]이 되죠.
    배열의 크기가 10x10이기 때문에 잘못된 인덱스 접근이 발생합니다.
    올바른 인덱스 값을 사용하시면, 예를 들어 spin_state[9][9]라고 바꾸시면 그 위치에 해당하는 정수 값이 하나 출력될겁니다.

    잠깐, 제가 하나라고 했죠?
    파이썬에서 C로 넘어오시면 이 부분에서 헷갈리실 수 있는데 파이썬은 그냥

    a = [[1, 2, 3], [4, 5, 6]]
    print(a)
    

    하면 알아서 2차원 배열 a 전체를 출력하잖아요?
    하지만 C는 그렇게 친절하지 않습니다.
    2차원 배열의 모든 값을 반복문을 통해 일일히 하나씩 출력하셔야 배열 전체를 출력하실 수 있습니다.
    아래 코드를 사용해보세요.

    for (i = 0; i < 10; i++)
    {
        for (j = 0; j <10; j++)
        {
            printf("%d ", spin_state[i][j]); // (i, j) 위치의 값 하나 출력
        }
        printf("\n"); // 개행
    }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 감사합니다ㅠ.ㅠ 도움이 많이 되었습니다 박형선 2019.2.15 15:27

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)