C言語なら、俺に聞け! <12>
■ このスレッドは過去ログ倉庫に格納されています
0685680
NGNG#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_NAMES 6
typedef struct {char num[2]; char _space[1]; char name[MAX_NAMES]; char lfcr[2];} TXTBUF;
typedef struct {int num; char name[MAX_NAMES + 1];} Meibo;
#define Val(s) _Val((s), sizeof(s))
static int _Val(const char * s, int l) {
char buf[128]/* かなり適当 */; memcpy(buf, s, l); buf[l] = '\0'; return (atoi(buf));
}
int compare(const void *y, const void *x) {
Meibo* m1 = (Meibo*)y; Meibo* m2 = (Meibo*)x; return m1->num < m2->num;
}
void main() {
//ファイルオープンもリードも成功するものとして、エラーチェックは無視しました。
Meibo meibo[15]; TXTBUF txtbuf;
FILE* fp;
int i, n;
fp = fopen("名簿.txt", "r");
n = (int)(filelength(fileno(fp)) / sizeof(TXTBUF));
for (i = 0; i < n; i++) {
fseek(fp, (long)sizeof(TXTBUF) * i, SEEK_SET);
fread(&txtbuf, sizeof(char), sizeof(TXTBUF), fp);
meibo[i].num = Val(txtbuf.num);
memcpy(meibo[i].name, txtbuf.name, MAX_NAMES);
meibo[i].name[MAX_NAMES] = '\0';
}
fclose(fp);
printf("ソート前\n");
for(i = 0; i < n; i++)
printf("%02d - %s\n", meibo[i].num, meibo[i].name);
qsort((void*)meibo, n, sizeof(Meibo), compare);
printf("ソート後\n");
for(i = 0; i < n; i++)
printf("%02d - %s\n", meibo[i].num, meibo[i].name);
}
言葉で説明するのムズイ・・・ソースで勘弁してください
■ このスレッドは過去ログ倉庫に格納されています