사이드바 열기

'문제'에 해당되는 글 1건

이 문제는 이중포인터에 대한 문제입니다. 이중포인터를 사용하여 인자를 전달하는 방법으로
이렇게 쓸 필요는 없으며, 상당히 가독성도 떨어지는 코드입니다.

어떠한 카페에 가서 질답게시판에 가보니 이러한 소스가 올라와 포인터에 대해 잘 알아볼 기회가 될 것같아 만들어본 것입니다.

#include 
#include 


void Input(struct Data **D, int *num);  //입력 담당 함수
void Output(struct Data **D, int *num);  //출력 담당 함수

typedef struct Data
 {
       char name[20];  //작가이름
       char book[40];  //책이름
       int page;   //페이지수
 }Data;


/* 메인함수 */
int main(void)
{
      int number;  //입력받을 권수를 저장할 변수
      struct Data *D;

      fputs("몇권을 입력? : ", stdout);
      scanf("%d", &number);
      fflush(stdin);  //버퍼에 남은 입력을 비움
 
      D=(Data*)calloc(number , sizeof(Data));
      if(D==NULL){
      puts("메모리 할당 실패!");
      exit(1);
      }
 
      Input(&D, &number);
      Output(&D, &number);

    

      free(D);

      return 0;
}


/* 데이터 입력 함수 */
void Input(struct Data **D, int *num)
{
      int i;
 
      puts("도서 정보 입력");
 
      for(i=0; i<*num; i++)
     {
      //저자 입력
      fputs("저자:", stdout);
      fgets(D[i]->name, sizeof(D[i]->name), stdin);
 
       /* 이 아래줄은 fgets가 \n까지 저장해 한줄을 띄어버리는 것을 막기 위함임
          인터넷에서 참고했음  */
      { register char *p; for(p=D[i]->name;*p;p++) if(*p=='\r' || *p=='\n'){ *p = '\0'; break;} }
 
       //제목 입력
       fputs("제목:", stdout);
       fgets(D[i]->book, sizeof(D[i]->book), stdin);
      { register char *p; for(p=D[i]->book;*p;p++) if(*p=='\r' || *p=='\n'){ *p = '\0'; break;} }
 
       //페이지수 입력
       fputs("페이지수:", stdout);
       scanf("%d", &D[i]->page);
 
       puts("");
       fflush(stdin); //버퍼에 남아있는 입력을 비움
      }
}

/* 데이터 출력 함수 */
void Output(struct Data **D, int *num)
{
      int i;
 
      puts("도서 정보 출력");
 
      for(i=0; i<*num; i++)
      {
          printf("book%d \n",i+1);
          printf("저자:%s\n",D[i]->name);
          printf("제목:%s\n",D[i]->book);
          printf("페이지수:%d\n", D[i]->page);
          puts("");
      }
}
Posted by LaLuna
이전페이지 1 다음페이지
위로

사이드바 열기