C언어 질문... 해결
이룩
-- 역시 이상한 현상을 발견하여.. 질문방에 올립니다...이 프로그램은.. 20명의 이름을 받아 그 사람을 5명씩 4조로 나눠각 조원을 출력해주는 프로그램입니다...[소스]#includestdio.h
#includeconio.h
#includestdlib.h
#includetime.hint main(void)
{
srand((int)time(NULL));
char person[20][7];
char group1[5][7];
char group2[5][7];
char group3[5][7];
char group4[5][7];
int group[4]={5,5,5,5}; //한 조에 6명이상 들어가는 것을 막기위한 장치(1)
int i,j=1,a=0,b=0,c=0,d=0;
printf(Enter Names(20 person)\n);
for(i=0;i20;i++)
scanf(%s\n,person[i]);
for(i=0;i20;i++)
{
do
{
j=rand()%4+1; //j는조...
}while(group[j-1]==0); //한 조에 6명이상 들어가는 것을 막기위한 장치(2)
if(j==1) { group1[a][7]=person[i][7]; a++;}
else if(j==2) { group2[b][7]=person[i][7]; b++;}
else if(j==3) { group3[c][7]=person[i][7]; c++;}
else if(j==4) { group4[d][7]=person[i][7]; d++;}
}
printf(Group A\n);
for(i=0;i5;i++)
printf(%s\n,group1[i]);
printf(Group B\n);
for(i=0;i5;i++)
printf(%s\n,group2[i]);
printf(Group C\n);
for(i=0;i5;i++)
printf(%s\n,group3[i]);
printf(Group D\n);
for(i=0;i5;i++)
printf(%s\n,group4[i]);
getch();
return 0;
}
이상한 점들..
1. 21명의 이름이 받아진다??
2. 출력 결과가 마구 깨져 나온다...
머가 문제인가요???
-
에드워드
잘 되네요 ㅋㅋ 감사합니다.
-
아라
ㄴ 아 깜빡했네요... ㅠ.ㅠ 감사합니다.
-
Loseless
지금 코드에서는 한조에 제한된 인원이 전부 배정되었는지 제대로 확인을 하지 않네요 .
while(group[j-1]==0); //한 조에 6명이상 들어가는 것을 막기위한 장치(2)
아마도 이부분을 그 용도로 쓰시는 듯 한데 , 결과적으로 저 group 안의 값을 변화시키는 곳이 없기 때문에
저 조건은 무조건 거짓이 됩니다 .
저 코드 이후
--group[ j - 1 ];
를 추가하셔서 남은 인원을 감소 시켜주셔야 올바른 결과가 나오겠죠 . -
로운
ㄴ 그래도 약간 이상하게 나오네요...
어느정도는 나오는데..
사람이름에 없는게 조 결과에 나오네요
그리고 갑자기 ??가 뜨고요... -
꽃초롱
입력이 21명인 것은 scanf 에서 \\n 를 빼주시면 됩니다 .
그리고 c 에서 문자열은 대입 연산으로 복사할 수가 없습니다 .
group1[a][7]=person[i][7];
이런 부분들은 7 바이트를 대입하는게 아닌 7번쨰 요소만을 대입한다는 의미 입니다 .
수다님 말씀대로 strcpy 나 memcpy 등의 메모리 복사 함수를 이용해 복사하셔야 합니다 .
strcpy( group1[ a ], person[ i ] );
또는
memcpy( g -
중독적
??? 잘 몰라요 아직 초보라서;;;