작성
·
931
1
#include <stdio.h>
#include <stdlib.h>
struct kid
{
char name[100];
int height;
};
int compare(const void* first, const void* second)
{
if (((struct kid*)first)->height > ((struct kid*)second)->height)
return 1;
else if (((struct kid*)first)->height < ((struct kid*)second)->height)
return -1;
else
return 0;
}
int main()
{
struct kid my_friends[] = {
"Jack Jack", 40, "Geenie", 300, "Aladdin", 170, "Piona", 150
};
const int n = sizeof(my_friends) / sizeof(struct kid);
qsort(my_friends, n, sizeof(struct kid), compare);
for (int i = 0; i < n; i++)
printf("%s \t%d\n", my_friends[i].name, my_friends[i].height);
return 0;
}
위는 저의 코드입니다.
강의 5분 45초를 보면 printf()함수에 \t를 통해서 간격을 조정해주는데 교수님의 경우 숫자가 같은 위치에서 시작하는데
저는 왜 40 혼자 멀리 떨어져있을까요?
또 \t를 검색해보면 Tab키와 같이 일정한 간격을 띄움라고 나와있는데 일정한 간격을 어디를 기준으로 띄우는 건가요?
"Jack Jack"의 경우 공백 포함 9글자고
"Geenie의 경우 6글자인데
강의에서 "40", "300"은 같은 위치에서 시작함에 의문이 생깁니다.
답변 1
1
안녕하세요, 답변 도우미 Soobak 입니다.
\t
(탭 문자) 는 일반적으로 8
개의 공백 문자로 표현됩니다. 다만, 이는 환경에 따라서 달라질 수 있습니다. (예 : 터미널, IDE 설정 등)
일정한 간격을 띄우는 기준은 '탭 정지 위치' 에 따라서 결정됩니다.
'탭 정지 위치' 역시 환경에 따라서 달라질 수 있습니다.
(관련 키워드 'tab stop' 으로 검색을 해보셔도 도움이 되실 것 같습니다.)
코드에서, "Jack Jack"
은 9
글자이로 8
글자를 초과하고, 나머지 글자들을 모두 8
글자 이하이기 때문에, 질문자님 터미널 환경의 '탭 정지 위치' 에 있어서 8
글자만큼의 차이가 생기는 것으로 보입니다.
\t
(탭 문자) 를 통해 문자열의 출력을 고정하는 방법 외에도, printf()
함수의 형식 지정자를 사용하여 다음과 같이 정렬할 수도 있으니, 상황에 따라서 적절한 방법을 선택하시면 좋을 것 같습니다.
pritnf("%-16s\t%d\n", my_friend[i].name, my_friend[i].height);