게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c언어 함수 질문드립니다
게시물ID : programmer_12957짧은주소 복사하기
작성자 : 나다임마
추천 : 0
조회수 : 1022회
댓글수 : 8개
등록시간 : 2015/08/27 02:22:19
옵션
  • 베스트금지
  • 본인삭제금지
안녕하세요. c언어초보입니다.
c언어를 이용해서 프로그램을 만들고 있습니다.
(일일이 입력하는게 귀찮아서) 프로그램 실행으로 한번에 팍! 만들려고 합니다.











ppt.PNG

파란 구역에는 남자만 순서가 랜덤으로 섞이고,
빨간 구역에는 여자만 순서가 랜덤으로 섞입니다.
녹색은 항상 저 위치에 고정이 되어 있어야 합니다.












사실 개발소발로 소스코드는 다 작성했습니다.

cmd.PNG

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

int Everyday();

void main()
{
int i,j; //반복 변수
int r, man_random[5], woman_random[3];
char man_std[5][6]={"남자1","남자2","남자3","남자4","남자5"};
char woman_std[3][6]={"여자1","여자2","여자3"};
Everyday();//날짜표시
srand(time(NULL)); //시간별 랜덤 만들기


printf("  ===================================================================\n");
printf(" ㅣ  \t\t ㅣㅣ  \t   A동\t   ㅣ  \t   B동\t   ㅣ  \t   기타\t   ㅣ\n");
printf("  ===================================================================\n");

for(i=0;i<5;i++)//남자랜덤
    {
        man_again:;
        r=rand()%5;
        for(j=0;j<5;j++)
            if(r==man_random[j])
                goto man_again;
        man_random[i]=r;
    };


for(i=0;i<3;i++)//여자랜덤
    {
        woman_again:;
        r=rand()%3;
        for(j=0;j<3;j++)
            if(r==woman_random[j])
                goto woman_again;
        woman_random[i]=r;
    }


printf(" ㅣ \t2층\t ㅣㅣ");//2층
for(i=0;i<2;i++)
{
printf("     ");
for(j=0;j<6;j++)
{
printf("%c", man_std[man_random[i]][j]);
}
printf("   ㅣ");

if(i==1) printf("\t  고정임   ㅣ");
}
printf("\n  ==================-------------------------------------------------\n");


printf(" ㅣ \t3층\t ㅣㅣ");//3층
for(i=2;i<5;i++)
{
printf("     ");
for(j=0;j<6;j++)
{
printf("%c", man_std[man_random[i]][j]);
}
printf("   ㅣ");
}
printf("\n  ==================-------------------------------------------------\n");


printf(" ㅣ \t4층\t ㅣㅣ");//4층
for(i=0;i<3;i++)//출력
{
printf("     ");
for(j=0;j<6;j++)
{
printf("%c", woman_std[woman_random[i]][j]);
}
printf("   ㅣ");
}
printf("\n  ==================-------------------------------------------------\n\n\n");
getchar();
}

int Everyday() //날짜 표시
{
struct tm *t;
time_t timer; // 시간측정

timer = time(NULL);    // 현재 시각을 초 단위로 얻기
t = localtime(&timer); // 초 단위의 시간을 분리하여 구조체에 넣기
 
printf("\n\t\t\t%d년 %d월 %d일 \n\n",t->tm_year + 1900, t->tm_mon + 1, t->tm_mday);

}














너무 난잡해서 함수를 이용해서 조금 간편하고 보기 쉽게 바꾸고 싶은 욕심이 나더라구요!
그래서 '함수'로 정리를 해봤더니

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

//함수
int Everyday();//시간으로 변환하는 랜덤함수
int random_fun();//랜덤함수
int show();//이름 섞기


//변수
int i,j; //반복 변수
int r, random[8];//랜덤, 랜덤선언
int MIN,MAX;//최대,최소 변수
char std[8][6]={"남자1","남자2","남자3","남자4","남자5","여자1","여자2","여자3"};

void main()
{
Everyday();//날짜표시
random_fun();

printf("  ===================================================================\n");
printf(" ㅣ  \t\t ㅣㅣ  \t   A동\t   ㅣ  \t   B동\t   ㅣ  \t   기타\t   ㅣ\n");
printf("  ===================================================================\n");

printf(" ㅣ \t2층\t ㅣㅣ");//2층
show(0,2);
printf("\n  ==================-------------------------------------------------\n");


printf(" ㅣ \t3층\t ㅣㅣ");//3층
show(2,5);
printf("\n  ==================-------------------------------------------------\n");


printf(" ㅣ \t4층\t ㅣㅣ");//4층
show(5,8);
printf("\n  ==================-------------------------------------------------\n\n\n");
getchar();
}

int Everyday() //날짜 표시
{
struct tm *t;
time_t timer; // 시간측정
timer = time(NULL);    // 현재 시각을 초 단위로 얻기
t = localtime(&timer); // 초 단위의 시간을 분리하여 구조체에 넣기
 
printf("\n\t\t\t%d년 %d월 %d일 \n\n",t->tm_year + 1900, t->tm_mon + 1, t->tm_mday);
}

int random_fun()//이름 섞기
{
srand(time(NULL)); //시간별 랜덤 만들기
for(i=0;i<8;i++)
    {
        again:;
        r=rand()%8;
        for(j=0;j<8;j++)
{
if(r==random[j])
goto again;
}
        random[i]=r;
    }
}

int show(int MIN, int MAX)//출력
{
for(i=MIN;i<MAX;i++)
{
printf("     ");
for(j=0;j<6;j++) printf("%c", std[random[i]][j]);
printf("   ㅣ");

if(i==1) printf("\t  고정값   ㅣ");
}
}

cmd2.PNG



그랬더니 이렇게 날짜를 제외하고 검정화면만 두둥!! 에러표시라도 나오면 수정이라도 하지...

어디가 문제인거야?? 하면서 main 함수시작점 안에 위치한 random_fun();를 제거하니

cmd3.PNG

당연히 랜덤으로 섞이지가 않네요.





이것때문에 하루종일 붙잡고 있습니다 ㅠㅠ. 어떻게 해야 고칠 수 있을까요??




덧1.) 프로그래밍은 C언어만 배워서 이거 밖에 못쓰지만, 이 어둑칙칙한 콘솔화면은 영 그렇네요.
UI를 좀더 이쁘게 할 수 있나요? 다른 분들은 뭔가 전문가(?) 처럼 보이는 툴을 사용하더라구요.
(본인은 Visual Studio 2010을 씁니다.)
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호