回答受付が終了しました

ID非公開

2022/1/23 2:52

11回答

C言語の課題です。わかるかた教えてください

回答(1件)

0

「以下のテキストファイル」に当たるものとして、"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個