Создание файла и запись в него случайных символов

393
27 мая 2017, 18:54

Пытаюсь создать текстовый файл, и с помощью генератора случайных букв(+пробел, для того, чтобы получались "слова" разной длины) записывать в этот файл набор этих самых букв. По отдельности если делаю, то файл создается, буквы генерируются, а вместе это не получается сделать. Можете объяснить почему и наставить на путь истинный)

#include <cstdio>
#include <cstdlib>
#include <ctime>
int main ()
{
    FILE * pFile;
    int val = 15*1024*1024;
    int i;
    srand(time(NULL));
    unsigned char mass;
    for(i=0;i<30;++i)
        mass=(rand() % ('z'-'a'+1))+'a';
    pFile = fopen ( "myf.txt" , "w" );
    fwrite (mass , 1 , sizeof(val) , pFile );
    fclose (pFile);
}

И еще такой вопрос: Как все-таки можно заполнить файл случайными буквами с пробелом (чтобы получались "слова") на 10МБ?

Answer 1

Итак,

for(i=0;i<30;++i)
    mass=(rand() % ('z'-'a'+1))+'a';

30 раз переприсваиваем значение одной и той же переменной (кстати, пробелом тут и не пахнет).

Затем пишем в файл 4 байта (размер int)? находящиеся по адресу, который хранится в переменной mass:

fwrite (mass , 1 , sizeof(val) , pFile );

Кстати, эта строка в C++ не компилируется, так что...

Наверное. вы хотели что-то вроде этого?

#include <cstdio>
#include <cstdlib>
#include <ctime>
int main ()
{
    FILE * pFile;
    pFile = fopen ( "myf.txt" , "w" );
    int val = 15*1024*1024;
    int i;
    srand(time(NULL));
    char mass;
    for(i=0; i<val; ++i)
    {
        mass=(rand() % ('z'-'a'+2))+'a' - 1;
        if (mass < 'a') mass = ' ';
        fwrite (&mass , 1 , sizeof(mass) , pFile );
    }
    fclose (pFile);
}
Answer 2

Галочка успела появиться.. ну да ладно, зря что ли писал, вдруг тоже пригодится.

#include <ctime>
#include <fstream>
int main()
{
    //Задаём диапазон количества символов в одном слове и количество символов в файле
    const int minWordLength = 2,
        maxWordLength = 30, 
        maxSymbolInFile = 10*1024*1024; 
    std::ofstream fout("out.txt");
    srand(time(nullptr));
    //определяем длину первого слова
    int currentWordLength = minWordLength + rand() % (maxWordLength - minWordLength);
    int symbolsInFile = 0;
    while (symbolsInFile<maxSymbolInFile)
    {           
        if (!currentWordLength)
        {
            //Если завершили формирования слова, то печатаем пробел и
            fout << " ";
            ++symbolsInFile;
            //определяем длину следующего слова
            currentWordLength = minWordLength + rand() % (maxWordLength - minWordLength);               
        }
        //Добавляем в текущее слово новый символ
        fout << (char)((rand() % ('z' - 'a' + 1)) + 'a');
        --currentWordLength;
        ++symbolsInFile;
    }
    fout.close();
}
READ ALSO
Как взять title, process, process id активного окна?

Как взять title, process, process id активного окна?

Хочу в этом switch, отловить title, process, process idУ меня есть 2 функции

272
Инстанцирование шаблона non-const значением

Инстанцирование шаблона non-const значением

Есть ли в крестах возможность инстанцировать шаблон типа

284
Новичок. Помогите пожалуйста. C++

Новичок. Помогите пожалуйста. C++

Всем приветСовсем недавно начал изучение плюсов (да и программирования в целом, до этого лишь немного писал на Python)

408
с++ крестики нолики баг

с++ крестики нолики баг

Здравствуйте я новенький в мире программирования c++вот решил устроится стажером в фирму

334