다중 정렬 / 내림차순 오름차순 정렬
에드워드
질문 제목 :다중 정렬(multi sorting) 하기질문 요약 :다중 정렬 / 내림차순 오름차순 정렬
질문 내용 : 정렬을 할 때 우선순위를 줘서 정렬하고 싶어요.
제가 구현한 것은 1순위가 area이고 2순위가 size인데 이렇게 고정된 것이 아니라
구조체의 다른 멤버들을 자유롭게 다중 정렬하고 싶은데 잘 안되네요 ㅠ
ex) 1순위는 size 2순위는 line_No 이렇게요...
그리고 하나 더 질문 드리면 내림차순과 오름 차순이 되도록 하고 싶습니다.
#include stdio.h
#include stdlib.h
#include string.h#define OUTPUT sample_re.txt
#define MAX 256
struct Material{
char area[20];
char line_No[20];
char sheet_No[20];
float size;
char item[20];
};
void Sort_area(Material* t, int count);
void Sort_area_size(Material* t, int count);
void OutputData(Material* t, int count);
void ResultData(Material* t, int count);
int line_count();
int comp(const void *a, const void *b);
int comp(const void *a, const void *b) {
return(strcmp((char *)a, (char*)b));
}void main()
{
int count = 0;
count = line_count();
struct Material mt[MAX];
memset(mt, 0, sizeof(mt));
OutputData(mt, count);
int ch1;
while(2)
{
puts(===== 정렬할 항목을 선택 =====);
puts(1. 지역);
puts(2. area + size);
puts(0. 종료);
scanf(%d, &ch1);
switch(ch1)
{
case 1:
Sort_area(mt, count);
ResultData(mt, count);
break;
case 2:
Sort_area_size(mt, count);
ResultData(mt, count);
break;
case 0: exit(0);
break;
}
}
system(pause);
}
int line_count()
{
int line = 0;
FILE *fp = fopen(sample.txt,rt);
char buf1[MAX];
while(fgets(buf1, 256, fp) != NULL)
{
line++;
}
printf(Line 개수= %d \n, line);
return line;
}void OutputData(Material* t, int count)
{
int i, j;
char filename[20];
char buf1[MAX];
FILE *fp1;
while(1)
{
printf(입력할 파일명을 입력하세요(예: *.txt):);
scanf(%s,filename);
fp1=fopen(filename,r);
if(fp1==NULL)
printf(해당 파일이 없습니다.);
else
break;
}
for(i=0; icount; i++){
fscanf(fp1,%s %s %s %f %s \n, t[i].area, t[i].line_No, t[i].sheet_No, &t[i].size, t[i].item);
}
fclose(fp1);
printf(┌──────【 입력된자료 】───────┐\n);
printf(│ 지역 line_No sheet_No size item │\n);
for(j=0; jcount; j++, t++)
printf(│%s %s %s %.2f %s │\n, t-area, t-line_No, t-sheet_No, t-size, t-item);
printf(└─────────────────────┘\n\n);
}void Sort_area(Material* t, int count)
{
Material temp;
int i,j;
for(i=0;icount-1;i++){
for(j=i+1;jcount;j++){
if(strcmp((t+i)-area,(t+j)-area)0){
temp=*(t+i);
*(t+i)=*(t+j);
*(t+j)=temp;
}
}
}
}void Sort_area_size(Material* t, int count)
{
int i,j;
Material temp1, temp2;
for(i=0;icount-1;i++){
for(j=i+1;jcount;j++){
if(strcmp((t+i)-area,(t+j)-area)0){
temp1=*(t+i);
*(t+i)=*(t+j);
*(t+j)=temp1;
}
else if(strcmp((t+i)-area,(t+j)-area)==0){
if((t+i)-size(t+j)-size){
temp2=*(t+i);
*(t+i)=*(t+j);
*(t+j)=temp2;
}
}
}
}
}
void ResultData(Material* t, int count)
{
FILE *fp2;
int i;
fp2=fopen(OUTPUT,w);
for(i=0; icount; i++, t++)
{
printf(│%s%10s%20s%10.2f%20s │\n, t-area, t-line_No, t-sheet_No, t-size, t-item);
fprintf(fp2, │%s%10s%20s%10.2f%20s │\n, t-area, t-line_No, t-sheet_No, t-size, t-item);
&}
fclose(fp2);
}
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692451 | 이 문제좀 풀어주세요 ^^ | 게자리 | 2025-04-23 |
2692424 | 2차원배열 자료입력질문이요! (1) | 똘끼 | 2025-04-22 |
2692401 | 유닉스안에서 C언어를 이용한 명함 만들기 입니다; 이해안가는 부분이있네요 | 2gether | 2025-04-22 |
2692374 | 고수님들 댓글 마니부탁해요!!! (2) | 엄지 | 2025-04-22 |
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |