Доброй ночи, помогите пожалуйста с задачей
Напишите программу на C, которая генерирует простую матрицу случайных чисел с плавающей точкой и сохраняет ее в файл. Имя файла должно предоставляться командной строкой Linux, и программа должна работать, только если файл уже существует.
Подсказка: Чтобы понять содержание этого задания, вы должны сохранить матрицу в одной инструкции «wirte».
Другие языки программирования и технологии
Управление файлами нижнего уровня
спасибо за подсказку.
//C99 required
#include < stdio.h >
#include < stdlib.h >
#include < stdbool.h >
#include < string.h >
#include < time.h >
const char pathSeparator =
#ifdef __linux__
'/';
#elif __WIN32
'\\';
#else
'\0';
#error Platform is not supported. Please set the path delimiter
#endif
const char* error = "error";
const char* usingFormat = "using: %s filename\n";
const char* printFormat = "%8.2f";
const size_t m = 2, n = 5;
const size_t mSize = m*n;
const float loLimit = -10, hiLimit = 10;
int main(int argc, char* argv[]) {
//params override - just for test
//argc=2;
//argv[1] = "/home/user/test.txt";
if (argc!=2) {
fprintf(stderr, usingFormat, strrchr(argv[0], pathSeparator)+1);
return EXIT_FAILURE;
}
FILE *f = fopen(argv[1], "r+b");
if (!f) {
perror(error);
return EXIT_FAILURE;
}
float* matrix = (float*)malloc(sizeof(float)*mSize);
if (!matrix) {
perror(error);
fclose(f);
return EXIT_FAILURE;
}
srand(time(NULL));
float *p = matrix;
for(size_t i=0;i<m;i++) {
for(size_t j=0;j<n;j++, p++) {
*p = loLimit + ((float)rand())/((float)RAND_MAX/(hiLimit-loLimit));
printf(printFormat, *p);
}
puts("");
}
bool isOk = fwrite(matrix, sizeof(float), mSize, f)==mSize;
if (!isOk) perror(error);
free(matrix);
fclose(f);
return isOk? EXIT_SUCCESS : EXIT_FAILURE;
}
P.S: В задании не сказано что делать если существующий файл больше чем размер записываемых данных. Соотв. в этом случае тут будет перезаписано m*n*sizeof(float) байт, остальное содержимое файла будет не тронуто.
Файл есс-но будет двоичный (условие намекает), так что блокнотом его открывать бесполезно =)

#include < stdio.h >
#include < stdlib.h >
#include < stdbool.h >
#include < string.h >
#include < time.h >
const char pathSeparator =
#ifdef __linux__
'/';
#elif __WIN32
'\\';
#else
'\0';
#error Platform is not supported. Please set the path delimiter
#endif
const char* error = "error";
const char* usingFormat = "using: %s filename\n";
const char* printFormat = "%8.2f";
const size_t m = 2, n = 5;
const size_t mSize = m*n;
const float loLimit = -10, hiLimit = 10;
int main(int argc, char* argv[]) {
//params override - just for test
//argc=2;
//argv[1] = "/home/user/test.txt";
if (argc!=2) {
fprintf(stderr, usingFormat, strrchr(argv[0], pathSeparator)+1);
return EXIT_FAILURE;
}
FILE *f = fopen(argv[1], "r+b");
if (!f) {
perror(error);
return EXIT_FAILURE;
}
float* matrix = (float*)malloc(sizeof(float)*mSize);
if (!matrix) {
perror(error);
fclose(f);
return EXIT_FAILURE;
}
srand(time(NULL));
float *p = matrix;
for(size_t i=0;i<m;i++) {
for(size_t j=0;j<n;j++, p++) {
*p = loLimit + ((float)rand())/((float)RAND_MAX/(hiLimit-loLimit));
printf(printFormat, *p);
}
puts("");
}
bool isOk = fwrite(matrix, sizeof(float), mSize, f)==mSize;
if (!isOk) perror(error);
free(matrix);
fclose(f);
return isOk? EXIT_SUCCESS : EXIT_FAILURE;
}
P.S: В задании не сказано что делать если существующий файл больше чем размер записываемых данных. Соотв. в этом случае тут будет перезаписано m*n*sizeof(float) байт, остальное содержимое файла будет не тронуто.
Файл есс-но будет двоичный (условие намекает), так что блокнотом его открывать бесполезно =)

Похожие вопросы
- вопрос знающим людям,кто шарит в расширениях и файлах на самом углублённом уровне?
- Пишу программу для управления микроконтроллера ARDUINO с помощью ИК приёмника.
- Как на PHP получать пути к файлам из массива names в теге input при загрузке некольких файлов?
- C++ Файлы. помогите чем можете . за хороший ответ подарю денюжку
- помогите написать bat-файл.
- фотошоп: как пользоваться правильно пакетной обработкой файлов?
- Помогите написать bat файлы, срочно надо, сам изучить уже не успеваю
- Как определить что файл имеет зеркальное расширение? Особенно полезно будет для школьников и пожилых людей
- Нужен bat файл, чтобы переименовал все txt файлы в папке, заменяя имя на первую строку содержимого файла
- Помогите с проблемой,Есть ли или существует метод-способ востоновить данные,файлы с карты памяти телефона.