Помещение информации в файл - C (СИ)
Формулировка задачи:
Дан массив вещественных чисел. Записать в файл округленные до целых чисел элементы массива.
Числа от -50 до 50, выбранные рандомом, кол-во чисел в массиве задать с клавиатуры.
Решение задачи: «Помещение информации в файл»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int main(int argc, char **argv)
{
int num = 0, i;
FILE *f;
double *arr;
double a = -50.0, b = 50.0;
const char *filename = "array.txt";
if(argc!=2)
{
printf("<prog> <num>");
return 1;
}
num = atoi(argv[1]);
if(num <= 0)
{
printf("arg error");
return 1;
}
f = fopen(filename, "w");
if(!f)
{
printf("Can not open file %s", filename);
return 1;
}
arr = malloc(num * sizeof *arr);
srand(time(0));
for(i = 0; i < num; i++)
{
arr[i] = ((double) rand() / (double) RAND_MAX) * (b - a) + a;
printf("%.3lf ", arr[i]);
}
for(i = 0; i < num; i++)
fprintf(f , "%d ", (int) round(arr[i]));
free(arr);
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с файлами, математикой и генерацией случайных чисел
- Определяем функцию main, которая принимает аргументы командной строки
- Инициализируем переменные: num (количество элементов), i (номер элемента), f (указатель на файл), arr (указатель на массив), a и b (границы для генерации случайных чисел), filename (имя файла)
- Проверяем корректность ввода аргументов командной строки. Если аргументов недостаточно, выводим подсказку и завершаем работу программы. Если все в порядке, считываем число из аргумента и сохраняем его в переменной num
- Проверяем, что значение num больше нуля. Если это не так, выводим сообщение об ошибке и завершаем работу программы
- Открываем файл с помощью функции fopen. Если файл не может быть открыт, выводим сообщение об ошибке и завершаем работу программы
- Выделяем память под массив arr с помощью функции malloc. Размер массива определяется переменной num
- Инициализируем генератор случайных чисел с помощью функции srand и текущего времени
- Заполняем массив arr случайными числами в заданном диапазоне с помощью цикла for и функции rand
- Выводим заполненные числа на экран с помощью функции printf
- Записываем числа в файл с помощью цикла for и функции fprintf. Для записи используем функцию round для округления чисел до целых значений
- Освобождаем память, выделенную под массив arr, с помощью функции free
- Завершаем работу программы