제 계획이

 

1.먼저 자리의 행과 열을 입력한다.

 

2.if함수를 이용해 범위내의 행과 열을 입력했을경우에 프로그램을 실행시킨다

 

3.for문을 이용해 학생의 이름을 입력한다.(만약 6*6일경우 36명의 이름 입력)

 

4.rand함수를 이용해 각 배열에 입력한 학생의 이름을 뒤섞는다.

 

5.뒤섞은 후 seat라는 2차원배열 각 자리에 배치시킨다.

 

이건데요 ..

 

일단 3번까지는 어찌어찌 됬는데 그다음부터가 문제네요 ..

 

랜드를 쓰면 잘 돌아가다가 36번이 나오는순간 연산을 멈추네요.

 

그리고 중복 숫자도 나오고 ..

 

일단 소스 올립니다

 

 

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

int main(void)
{
 srand((unsigned)time(NULL));
 int i;
 int j;
 printf(\"교실 좌석의 행과 열을 각각 입력하고 Enter\\n\");
 printf(\"행(6~7) : \");
 scanf(\"%d\",&i);
 printf(\"열(6~7) : \");
 scanf(\"%d\",&j);

 if(i==6 && j==6)
 {
  int seat[6][6];
  char name[36][36];
  int n;
  for(n=0;n<36;n++)
  {
   
   printf(\"이름 입력(%d) : \",n+1);
   scanf(\"%s\",name[n]);
  }

  
  for(int a=0;a<36;a++)
  {
   
   a=rand()%37;
   printf(\"%d번 %s\\n\",a+1,name[a]);
  }

 }

 return 0;
}

 

질문 1. 첫번째 for문에서 36명의 이름을 입력하는 배열 name을 name[36][36] 이렇게 해줘야 디버그 에러

           가 안나더라구요 .. name[36] 이렇게 쓰면 디버그 에러가 나고 .. 저렇게 써야 잘 입력되는 이유와

           name[0]에 이름하나 . 이런식으로 넣을수 있는 소스 형식이 있나요?

 

질문 2. name이 2차원배열 모양처럼 보이는데 밑에서 scanf에서는 1차원배열에 입력을 주는것처럼 해도

           별탈없이 실행이 되네요. 그렇다면 seat[0][0]=name[0] 이런식으로 대입 시킬수 있나요?

           만약 그게 안된다면 포인터로 가리키기만 해야할까요?

 

질문 3. 랜드함수를 돌릴때 36번이 나오면 멈추는 이유가 뭘까요? 시간적 여유가 되신다면 그걸 고칠수있는

           방법도 알려주시면 감사하겠습니다.

 

빠른답변 완전 감사하겠습니다 ㅜㅜㅜ