정처기 준비하는 문돌이 좀 도와주라.. ㅅㅂ 이런걸 니들은 어떻게 만드는거냐?? 대단하다
양질의 조공을 바치고 싶었으나 통매음이다 뭐다 해서 무서워서.. 아무거나 퍼옴
소스코드는 아래와 같고 입력 값은
aaaa
cccc
tttt
bbbb
요렇슴니다. 의문점은 소스코드 옆에 //볼드체 주석으로 적어놓겠음
노트에 펜으로 적으면서 동작을 따라가보는데 내가 이해를 잘못하는건지 좀
지적해주십쇼
#include<stdio.h>
#include<string.h>
#define SIZE 81
#define LIM 20
#define HALT ""
void stsrt(char* string[], int num);
char* s_gets(char* st, int n);
int main(void)
{
char input[LIM][SIZE]; //2차원 배열 input[20][81]
char* ptstr[LIM];
int ct = 0;
int k;
printf("최대 %d라인까지 입력하면 그것들을 정렬하겠습니다. ", LIM);
printf("입력을 멈추려면 라인 시작에서 Enter 키를 누르시오. ");
while (ct < LIM && gets(input[ct]) != NULL //aaaa 입력, 2차원 배열이므로 input[0]에 aaaa 들어감 gets() 리턴값이 NULL은 아니다???
&& input[ct][0] != '') //input[0][0]은 input[0]의 문자열의 첫번째 원소 즉 aaaa 중 a를 의미하는게 맞음?? 결국 while문으로 진입
{
ptstr[ct] = input[ct];//ptstr은 포인터의 배열, input이 2차원 배열이니까 ptstr[0]=input[0]에서 ptstr[0]은 &input[0][0]을 가진다?? 최대의문점1!
ct++; 즉 포인터 배열 ptstr은 input입력값의 첫번째 원소의 주소만을 가리킨다??? 아무튼 마지막 입력인 으로 input[4]에는 개행
} 문자가 들어가서 while문에서 빠져나옴(input[0]에서 input[4]까지 반복된 상태)
stsrt(ptstr, ct);//stsrt()의 전달인자로 포인터배열 ptstr와 4가 전달
puts("
문자열들이 정렬된 결과:
");
for (k = 0; k < ct; k++)
puts(ptstr[k]);
return 0;
}
void stsrt(char* strings[], int num)
{
char* temp;
int top, seek;
for(top=0; top<num-1; top++)
for(seek=top+1;seek<num;seek++)
if (strcmp(strings[top], strings[seek]) > 0)//strings[0]과 strings[1]을 비교, 근데 이걸로 각 배열 원소의 첫번째 글자에 접근을 어떻게 하는거지???
{ 매개변수 모양이 *strings[]인데 그럼 strings[0]과 strings[1]에도 참조연산자 *를 붙어야하는거??
temp = strings[top]; 요게 최대 의문점2
strings[top] = strings[seek];
strings[seek] = temp;
}
}
char* s_gets(char* st, int n)
{
char* ret_val;
int i = 0;
ret_val = fgets(st, n, stdin);
if (ret_val)
{
while (st[i] != ' ' && st[i] != '')
i++;
if (st[i] == ' ')
st[i] = '';
else
while (getchar() != ' ')
continue;
}
return ret_val;
}
선별해서 3개더 올리면 생각해봄 꼴리는걸로 ㄱ
여기사람들은 2D짤을 더좋아함 - dc App
만약 콘솔이 끝나서 입력받을수없는상태가되면 gets는 null을 반환함 - dc App
input[0][0]은 첫글자 맞음 - dc App
ptstrct = inputct 는 말그대로 문자열시작주소값을 넣는건데 맞음 - dc App
아답하기귀찮아 - dc App
의문점 2에서 문자에 접근 안함. 각 문자열의 주소만 넘겨주는 거임. 거기서 *를 붙이면 주소가 아니라 첫번째 문자에 접근하지. strcmp는 인자로 주소를 필요로함