C ++ не может записать в файл - PullRequest
0 голосов
/ 16 января 2020

Я борюсь с этим кодом уже некоторое время. Проще говоря, я хочу прочитать 2 Имена из файла1, а затем записать его в строку файла2. Он хорошо читает имя, но не записывает его в файл2.

#include <iostream>
#include <fstream>
#include <string>
#include <time.h>
int main()
{
int rand1 = 0,line_num = 0;
string Meno,Dni;


fstream ZoznamMien ("C:/Programovanie/Generator_dot/Dotaznik.txt");
fstream VolneDni ("C:/Programovanie/Generator_dot/Dni.txt");

srand((unsigned int)time(NULL));
rand1 = rand() % 16;

for (int i = 0; i < 2; i++)
{
    while (getline(ZoznamMien, Meno))
    {
        if (line_num == rand1)
        {
            getline(VolneDni, Dni);
            if (i == 0)
            {
                Dni = Dni + ' ' + Meno + ',';
            }
            else
            {
                Dni = Dni + ' ' + Meno;

            }
            cout << Dni << endl;
            cout << Meno << endl;
            break;
        }
        line_num++;
    }
        VolneDni << Dni;
}
}

Ответы [ 3 ]

3 голосов
/ 16 января 2020

Что такое логика c за пределами этого условия: if (line_num == rand1).

Он основан на случайных числах, поэтому file2 будет записан только в том случае, если это rand1 имеет значение 0 в первой итерации , 1 во второй итерации или 2 на третьей итерации.

0 голосов
/ 16 января 2020

Есть несколько изменений. Вы должны проверить, если файлы открыты успешно или нет. Случайное число должно быть восстановлено каждый раз. Также файл следует читать с начала на каждой итерации. Записать в выходной файл перед тем, как ломать l oop.

Рабочий код должен быть:

#include <iostream>
#include <fstream>
#include <string>
#include <time.h>
using namespace std; 
int main()
{
int rand1 = 0,line_num = 0;
string Meno,Dni;



fstream VolneDni ("C:/Programovanie/Generator_dot/Dni.txt");


for (int i = 0; i < 2; i++)
{
    srand((unsigned int)time(NULL));
    rand1 = rand() % 16;
    fstream ZoznamMien ("C:/Programovanie/Generator_dot/Dotaznik.txt");
    if( !ZoznamMien.is_open() ) {
        cout<<" file did not open "<<endl;
        return 0;
    }
    Dni="";
    while (getline(ZoznamMien, Meno))
    {
        if (line_num == rand1)
        {
            getline(VolneDni, Dni);
            if (i == 0)
            {
                Dni = Dni + ' ' + Meno + ',';
            }
            else
            {
                Dni = Dni + ' ' + Meno;

            }
            cout << Dni << endl;
            cout << Meno << endl;
            VolneDni << Dni;
            break;
        }
        line_num++;
    }

}
}
0 голосов
/ 16 января 2020

Давайте посмотрим на код, в котором вы создаете, и запишите новую строку в файл (с некоторыми добавленными комментариями):

if (i == 0)
{
    // Create the new string
    Dni = Dni + ' ' + Meno + ',';

    // Don't write the new string to the file
}
else
{
    // Create the new string
    Dni = Dni + ' ' + Meno;

    // Write the new string to the file
    VolneDni << Dni;
}

Вы пишете только в строку в части else, не когда i == 0.

Одно из решений - написать после if:

// Create the new string
if (i == 0)
{
    Dni = Dni + ' ' + Meno + ',';
}
else
{
    Dni = Dni + ' ' + Meno;
}

// Write the new string to the file
VolneDni << Dni;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...