강의

멘토링

커뮤니티

Inflearn Community Q&A

cjs's profile image
cjs

asked

Learn C Programming by Following Along with Hong Jeong-mo

14.25 qsort function pointer practice problem

\t 간격 차이

Written on

·

1.1K

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를 통해서 간격을 조정해주는데 교수님의 경우 숫자가 같은 위치에서 시작하는데

c언어.png

저는 왜 40 혼자 멀리 떨어져있을까요?

 


 

또 \t를 검색해보면 Tab키와 같이 일정한 간격을 띄움라고 나와있는데 일정한 간격을 어디를 기준으로 띄우는 건가요?

"Jack Jack"의 경우 공백 포함 9글자고

"Geenie의 경우 6글자인데

강의에서 "40", "300"은 같은 위치에서 시작함에 의문이 생깁니다.

c

Answer 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);

 

cjs's profile image
cjs

asked

Ask a question