「以下のテキストファイル」に当たるものとして、"Data.txt" を作成しています。そこから値を取り出し、正ならば "Positive.txt" に、負ならば "Negative.txt" に書き込んでいます。画面には、正の数、負の数、ゼロの数を表示します。
========
#include <stdio.h>
#include <stdlib.h>
#define NUM_VAL 100
#define BUF_SIZE 10
int main(void) {
char buf[BUF_SIZE];
int ct, ct_pos = 0, ct_neg = 0, ct_zero = 0;
double item;
FILE* data, * pos, * neg;
// データファイルを書き込み用にオープン
if ((data = fopen("Data.txt", "w")) == NULL) {
printf("Unable to open file.\n");
return 1;
}
// データを書き込む
for (ct = 0; ct < NUM_VAL; ct++) {
fprintf(data, "%.1f\n", (float)(rand() % 201 - 100) / 10);
}
// データファイルをクローズ
fclose(data);
// データファイルを読み込み用にオープン
if ((data = fopen("Data.txt", "r")) == NULL) {
printf("Unable to open file.\n");
return 2;
}
// 正の数用のファイルを書き込み用にオープン
if ((pos = fopen("Positive.txt", "w")) == NULL) {
printf("Unable to open file.\n");
return 3;
}
// 負の数用のファイルを書き込み用にオープン
if ((neg = fopen("Negative.txt", "w")) == NULL) {
printf("Unable to open file.\n");
return 4;
}
while (fgets(buf, BUF_SIZE, data) != NULL) { // データファイルから1行読み込み
// 実数を取り出す
sscanf(buf, "%lf", &item);
if (item > 0) { // 取り出した実数が正なら
fprintf(pos, "%.1lf\n", item); // 正の数用のファイルに書き込み
ct_pos++; // 正の数用のカウンタを1だけ増やす
}
if (item < 0) { // 取り出した実数が負なら
fprintf(neg, "%.1lf\n", item); // 負の数用のファイルに書き込み
ct_neg++; // 負の数用のカウンタを1だけ増やす
}
if (item == 0) { // 取り出した実数が負なら
ct_zero++; // ゼロ用のカウンタを1だけ増やす
}
}
// 正の数、負の数、ゼロの個数を表示
printf("正の値:\t%2d個\n", ct_pos);
printf("負の値:\t%2d個\n", ct_neg);
printf("ゼロ:\t%2d個\n", ct_zero);
// ファイルをクローズ
fclose(data);
fclose(pos);
fclose(neg);
return 0;
}
========
【実行結果(画面)】
正の値: 44個
負の値: 55個
ゼロ: 1個