C 전화번호부 v4.0_2)
load if( read_line ( fp, buffer, BUFFER_LENGTH) < = 0 ) : 더 이상 읽을 게 없으면, break 만일 유효한 정보가 있다면, name ~ group 정보를 읽고, 그 기준은 # 구분자를 기준으로 적용하는 것이다. 첫번째 ~ 4번째 token 이 각각 name ~ group 으로 들어가는 것이다. 기억할 것은, 존재하지 않는 항목은 한칸의 공백 문자이다. 이름이 없는 사람은 없으니, 해당 사항이 없지만, number ~ group 같은 경우, 없을 수 있으므로, 그 경우에는 한 개의 공백 문자로 이루어진 string 이 되는 것이다. 그리고 다 읽게 되면, 그것을 add ( ) 를 통해 directory에 추가한다. add 4개의 문자를 받는다. 그리고, 알..
더보기
C 전화번호부 v4.0_1)
1. 개요 지금까지는, 이름, 전화번호, 이메일 주소, 그룹을 지정할 수 있다. 이름 제외한 다른 항목들은 비워둘 수도 있다. 어떤 사람은 이름과 이메일 주소만. 있을 수도 있다. 위를 보면, 예를 들어, add 함수를 실행하고 사람 이름을 치면, 컴퓨터가 물어본다. phone ,email, group 은 뭐냐. 라고 불필요한 2개의 공백은 저장될 때 1개의 공백으로, 프로그램이 알아서 저장한다. 우리는, 입력한 정보를 directory.txt 로 저장한다. 그렇기 때문에, 파일의 형식을 살펴봐야 한다. 1) 각각의 사람에 대해 이름, 전화번호, 이메일, 그룹 등을 모두 지정해야 하는데, 어떤 사람은 1개만, 2개만 등등이 있을 수 있다. 그런데, 지금까지 전화번호부를 만들었을 때와 동일한 방식으로 저장..
더보기
C 전화번호부 v2.0_2)
4) add 자. 여기서부터는 이제 위에서 설명한 ' 정렬' 을 반영해서 할 건데, 왜 load 함수에서는 저러한 것들을 반영 안했어 ? 왜냐하면, 우리는 파일을 불러올 때, 이미 그 파일이 정렬되었다고 가정하기 때문이다. 당연히 add 할 때는, 우리가 새로운 사람을 추가하는 것이니까, add 할 사람의 이름과 번호를 buf1, buf2 에 입력받는다. 이제 이 사람을 전에는 그냥 맨 뒤에 추가했는데, 정렬을 반영해서 넣는 것이다. 처음에 i = n - 1; 즉, i 가 맨 마지막 사람을 뜻하는 것이다. 그 다음 strcmp( names[ i ] , buf1 ) i 번째 사람의 이름과, 내가 추가할 사람의 '이름'을 비교하는 것이다. strcmp( names[ i ] , buf1 ) 두 문자열이 같..
더보기
C 전화번호부 v3.0
Q. 왜 .... **name 이야 ? 왜 이중 포인터 배열을 쓴거야 ?? 1. 개요 예를 들어, 이와 같이, 명령 프롬프트 다음에 특정 명령을 입력하지 않고, 엔터를 쳐서 그 다음 줄로 넘어가게 되면, 명령 프롬프트 다음으로 넘어가는 것이 아니라, 엔터를 쳐서 그다음으로 넘어가게 된다. 따라서 우리는, 명령 프롬프트를 실행해서, 아무런 명령 없이 엔터를 쳐도, 그 다음 명령 프롬프트로 바로 넘어갈 수 있게 해주는 것이 목적이다. 또한, 이상한 명령어를 넣으면, 그에 해당하는 적절한 오류 메시지를 출력하도록 해주는 것이다. 이를 위해서는 사용자가 엔터를 칠 때까지, 그것이 몇개의 단위로 구성되었는지 관계없이, 라인 단위로 입력을 받고, 그에 대한 처리를 하는 것이 필요하다. 배열의 용량을 초과할 경우에는..
더보기