|
読んだ行のデータを配列に蓄えてからqsort()関数に渡して整列さえる方法
/*
* sort1.c - 標準入力からの行を昇順に整列
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LINE_SIZE (256 + 2) /* 1行の最大文字数+'\n'+'\0' */
#define MAX_LINES 100 /* 最大行数 */
int read_line(FILE *);
void write_line(FILE *, int);
char line[MAX_LINES][LINE_SIZE];
main(int argc. char **argv)
{
int n;
n = read_line(stdin); /* 入力 */
qsort(line, n, LINE_SIZE, strcmp); /* 整列 */
write_line(stdout, n); /* 出力 */
return (0);
}
int read_line(FILE *fp)
{
char tmp[LINE_SIZE];
int n;
for (n = 0; fgets(tmp, LINE_SIZE, fp) != NULL; n++) {
if (n < MAX_LINES)
strcpy(line[n], tmp);
else {
fprintf(stderr, "too much lines\n");
exit(1); /* abnormal terminate */
}
}
return (n);
}
void write_line(FILE *fp, int n)
{
int i;
for (i = 0; i < n; i++)
fputs(line[i], fp);
}
#define LINE_SIZE (256 + 2) /* 1行の最大文字数+'\n'+'\0' */
#define MAX_LINES 100 /* 最大行数 */
char line[MAX_LINES][LINE_SIZE];
上記のように宣言されているのにline[n]というアクセス方法があるの
ですが、これでもアクセスできるのでしょうか?
int read_line(FILE *);の中身で、これは、1行を読み込む関数ですか?
それともこれで、数行を読み込めますか?
for (n = 0; fgets(tmp, LINE_SIZE, fp) != NULL; n++)
上記の条件だと思うのですが、NULLまでで終了になってますね。
一行に、NULLというのが含まれていますよね、ということは、1行まで
しか読めないきがするのですが・・・間違ってますか?
|