...
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define N 100
struct person
{
char name[15];
char gender[3];
int age;
};
void sub1(struct person *x); //반복 출력 함수
void select_sort(struct person *x2); //이름 오름차순 선택 정렬 함수
void ptf(struct person x3[N]); //결과 출력 함수
static int count;
int main()
{
struct person input[N];
puts("최대 100명의 사용자 정보를 입력받고 출력합니다.");
sub1(input);
select_sort(input);
ptf(input);
}
void sub1(struct person *x)
{
int i=0;
char num;
do
{
printf("\n%d. 이름은? ",i+1);
scanf("%s", x[i].name);
printf(" 성별은(남 또는 여)? ");
scanf("%s", x[i].gender);
printf(" 나이는? ");
scanf("%d", &x[i].age);
count++;//100개 중에 몇개를 입력하였는지 구분, 반복문의 조건식에 이용
printf("계속 입력하려면 1, 그만하려면 0을 입력하세요. ");
num = getche();
i++;
if(i==N)
{
printf("\n더이상 사용자 정보를 입력할 공간이 없습니다.");
break;
}
}while(num != '0');//왜 while(i<N || num != '0');으로 하면 조건식이 씹히는지 의문
}
void select_sort(struct person *x2)
{
int i,j,index;
struct person tmp;
for(i=0;i<count-1;i++)
{
index = i;
for(j=i+1;j<count;j++)
{
if(strcmp(x2[index].name, x2[j].name) > 0)
{
index = j;
}
}
tmp = x2[index];//비교는 구조체 멤버인 name으로 했다. 자연스럽게 멤버끼리 스왑 한다 생각하지만
x2[index] = x2[i];//구조체는 본래 통째로 대입이 가능하고, 그렇게 해야한다.
x2[i] = tmp;
}
}
void ptf(struct person x3[N])
{
int i=0;
puts("\n\n\n 이름\t성별 나이");
puts("====================");
for(i=0;i<count;i++)
printf("%4s %s %2d\n", x3[i].name,x3[i].gender,x3[i].age);
puts("====================");
}
인용한 부분에 있어 만일 누락된 출처가 있다면 반드시 알려주시면 감사하겠습니다
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.