하도 뻘소리를 해대길래 듣기 실어서 이그노어를 했다.
과연 이게 언제 풀릴 것인지...
요즘 IRC Bot 만들기로 하고 있는데 마음대로 잘 안되서 계속 짜증만 나는데.. 말이지..


|
| "최건*" 님의 점수는 1,120점 입니다. |
|
|
|
|
|
이 문제는 이중포인터에 대한 문제입니다. 이중포인터를 사용하여 인자를 전달하는 방법으로
이렇게 쓸 필요는 없으며, 상당히 가독성도 떨어지는 코드입니다.
어떠한 카페에 가서 질답게시판에 가보니 이러한 소스가 올라와 포인터에 대해 잘 알아볼 기회가 될 것같아 만들어본 것입니다.
#include <stdio.h>
#include <stdlib.h>
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); //버퍼에 남아있는 입력을 비움
}
}