#include <stdio.h>
#include <string.h>
#define STR_LEN 50
#define BOOK_INFO_NUM 3
typedef struct bookInfo{
char bookTitle[STR_LEN];
char bookPub[STR_LEN];
int bookPrice;
}bookInfo;
int numOfData=0; ////////////이것의 전역변수 ㅠㅠ
bookInfo bookInfoList[BOOK_INFO_NUM];
int InsertList(bookInfo* bookPtr);
int main(void)
{
int i, num;
bookInfo book;
puts("********* 도서 정보 입력 *********");
for(i=0; i<BOOK_INFO_NUM; i++)
{
printf("%d번째 도서 정보 입력. \n", (i+1));
fputs("도서 제목: ", stdout);
gets(book.bookTitle);
fputs("출판사 명: ", stdout);
gets(book.bookPub);
fputs("도서 가격: ", stdout);
scanf("%d", &(book.bookPrice));
fflush(stdin);
num=InsertList(&book);
if(num==-1)
printf("입력에 실패하였습니다. \n");
else
printf("%d번째 입력 완료.......\n\n", num);
}
puts("********* 도서 정보 출력 *********");
for(i=0; i<BOOK_INFO_NUM; i++)
{
printf("%d번째 도서 정보 출력. \n", (i+1));
printf("도서 제목: %s \n", bookInfoList[i].bookTitle);
printf("출판사 명: %s \n", bookInfoList[i].bookPub);
printf("도서 가격: %d \n\n", bookInfoList[i].bookPrice);
}
return 0;
}
int InsertList(bookInfo* bookPtr)
{
int idx;
int inputIdx=numOfData; // 여기는 두번째 모르는 저의문제..
if(numOfData >= BOOK_INFO_NUM) // 여기도 주석이 달려잇는데 잘모르겟어요.
return -1; // -1은 입력 실패를 의미
/** 입력 위치 찾기 **/
for(idx=0; idx<numOfData; idx++) //여기욧!!
{
if(strcmp(bookInfoList[idx].bookTitle, bookPtr->bookTitle) >0)
{
inputIdx=idx;
break;
}
}
/** 입력이 가능하도록 자리를 마련 **/
for(idx=numOfData; idx>inputIdx; idx--)
bookInfoList[idx]=bookInfoList[idx-1];
/** 새로운 데이터 입력 **/
bookInfoList[inputIdx]=(*bookPtr);
/** 입력 성공 시 입력된 데이터 개수 반환 **/
return ++numOfData;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
잘모르는 부분을 체크해보앗는데요
1번문제에서 의미하는 전역변수가 무엇을 의미하는지 도저히 모르겟어요..
두번째에서 아직도 저 전역변수의 값은 0이 아닌가요?
그 0 의 값이 inputldx 로 들어가면 inputldx도 값이 0이 되지않나요?
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
그리고 그아래에서 문자열 비교해서
윗포문중에서요
for(idx=0; idx<numOfData; idx++)
여기자체가 전역변수인 numofdata 값이 0인데 어떻게 조건값에서 0<0 인데 이게 어떻게 되어버리는건지..
많이 혼란스러워요..
잘 알아듣게 이해시켜주세요 ㅠ..
아랫쪽부분을 좀 심도잇게 알려주시면 정말 감사하겟습니다
\"1번문제\" 가 어떤문젠지 모르겠고, \"두번째 문제\" 도 어떤건지 모르겠어. \"여기자체가 전역변수인 numofdata 값이 0인데 어떻게 조건값에서 0<0 인데 이게 어떻게 되어버리는건지..\" 여기서, 주어 ,동사, 목적어가 어떤건지 모르겠어. 내 이해력이 전반적으로 부족해서 그런거겠지만, 무엇을 질문하는지 조차 모르겠다.
return ++numOfData;
\"잘 알아듣게 이해시켜주세요 ㅠ.. \" 욕심이 너무 과한것 같다. 약간의 힌트만이라도 얻을수 있다면 고맙게 생각해야지. 그냥 내 입에 떠먹여주세요 라는 말로 들려.
으 ㅠㅠ 죄송합니다 말주변이 없어서 오해하게들렷나봐요
몇날몇일을봐도 저기 위에 정의되어잇는 전역변수가 0으로 설정되어잇는데 내려오면서 전역변수의 값이 변경되는 코드가없는데 어떻게 InserList 함수문장을 들어오면서 inputidx도 전역변수값인 0 으로 초기화가 되어버리면 그 바로아래 포문은 초기값이 idx가 0이라고 설정되어서 0이되고 그 다음 조건값이 전역변숙 ㅏ0이니까 0<0 이 되어버리는데 어떻게 진행이 되는지가 궁금합니다
난 이해했는디... 전역 변수 값이 0이잖아 위에 보면 근데 for문에서 그럼 처음에 0<0 비교하게 되는거 아냐 근데 어케 그게 참이되냐고 그냥 for문 안돌아가는거아냐 이런뜻임...
네네!! 그말이예요 !!
왜그렇게 되어버리는거예요 ?
ㄴ 아 , 그래? 확실히 내가 이해력이 부족한거 같네 ..헐..
아니예요 ; 제가 말주변이심하게없음;ㅈㅅ;;
근데 너무 댓글 막 달지는 말자 힌트를 주더라도 맞는 힌트를 줘야지 그냥 아무거나 던지는건 좀 보기 안좋다.
끙..
처음엔 그냥 입력 안하고 밑에 전여견수
밑에 리턴할 때 전역변수 ++하는거 있잖아 거기서 전역변수 값 1되고 두번째에서는 for 문 한번 돌고이런식이네
위에 포문을 무시하고 아래로 내려가서 입력성공시 데이터개수반환으로 가서 ++전역이 되고 다시 위에올라가서 포문을 실행시킨다구요?
처음에 전역변수를 내맘대로 지나치고 맨아래가서 ++ 하는게 어딧음?
아니 처음 insertlist함수가 호출됐을 때는 그 함수의 for문이 실행되지않지 왜냐면 0<0이 되니까 근데 두번째 호출에서는(BOOK_INFO_NUM 크기만큼 insertlist함수가 호출되니까) 0<1이 되니까 for문 1번 돌고 두번째에서는 2번 돌고 이러는거지
두번쨰로 호출된다는게 무슨뜻이예요? 1번만 호출되어잇잖아요..
글구 insertlist함수초반의 if(numOfData >= BOOK_INFO_NUM) 여기부분은 어차피 거짓인데 뭘 의미하는건지..
저기부분을 어떻게이해해야할지 ㅠ 제가 배운포문방식은 안의 값이 거짓이면 그냥 실행안하고 아래로 가는건데 0<0이면 그냥 거짓이니까 바로 포문 패스해서 지나가는거아닌가요?
포문값이 1번이라도 거짓이면 그냥 패스해서 다음꺼 진행하는거아녜요 ?..
아 ㅠㅠ 너무 답답ㅠㅠ ㅈㅅ;
어딜봐서 한번만 돈다는거지 \'ㅅ\' ?
for(idx=0; idx<numOfData; idx++) 가 들어있는 함수자체가 메인에서 for문타고 또 뱅뱅도는거 아님 \'ㅅ\' ?
BOOK_INFO_NUM 값이 3이잖아. 그러니까 insertlist함수가 3번 호출되지 않겠냐???
이셋키본지 몇달은된거같은데 아직도 이정도수준이라니..