Нужна помощь в задании по С++

297
03 мая 2018, 08:59

Нужно написать программу для шифрования и дешифрования файла за указанным именем. у меня не получается зашифровать файл поскольку прогамма не изменяет файл, а шифрует лишь то что получило читая файл(не оригинал файла).

Вот мой код :

 #include <iostream>
    #include <fstream>
    #include <ctime>
    #include <string>
    using namespace std;
    ifstream Print(string &path);
    void encryption(string &path, ifstream &fin);
    void decryption(string path, ifstream &fin);
    int main()
    {
        setlocale(LC_ALL, "ru");
        string path;
        ifstream fin;
        cout << "Enter the path of the file : ";
        cin >> path;
        cout << "Output file\n";
        fin = Print(path);
        encryption(path, fin);
        Print(path);
        decryption(path, fin);
        Print(path);
        return 0;
    }
    ifstream Print(string &path)
    {
        ifstream fin;
        fin.open(path);
        if (!fin.is_open())
        {
            cout << "Error opening file\n";
            return fin;
        }
        else
        {
            string str;
            while (!fin.eof())
            {
                getline(fin, str);
                cout << "\n" << str << endl;
            }
        }
        return fin;
    }
    void encryption(string &path, ifstream &fin)
    {
        ofstream fout;
        fout.open(path);
        if (!fout.is_open())
        {
            cout << "Error opening file\n";
            return;
        }
        else 
        {
            string str;
            cout << "\nEncryption" << endl;
            while (!fout.eof())
            {
                for (int i = 0; i < str.length(); ++i)
                {
                    str[i] += 1;
                }
                fout << str;
            }
            fout.close();
        }
    }
    void decryption(string path, ifstream &fin)
    {
        ofstream fout;
        fout.open(path);
        if (!fout.is_open())
        {
            cout << "Error opening file\n";
            return;
        }
        else
        {
            string str;
            cout << "\nDecryption" << endl;
            while (!fout.eof())
            {
                getline(fin, str);
                for (int i = 0; i < str.length(); ++i)
                {
                    str[i] -= 1;
                }
                fout << str;
            }
            fin.ignore();
            fin.close();
        }
    }
Answer 1

Вы что вообще делаете вот сдесь:

        while (!fout.eof())
        {
            for (int i = 0; i < str.length(); ++i)
            {
                str[i] += 1;
            }
            fout << str;
        }

И такой же бред в другой ф-ции. Вы что пытаетесь сделать? Вы вкурсе, что fout записывает в файл, а не читает из него! Убирети это, так программа хотя бы завершаться будет.

И как вы обращаетесь с fin? Кто так делает? Открыли, прочитали и закрыли!!! А не открыли, прочитали, потом открыли другим методом, а на то, чтобы закрыть поток - так вообще наплевать. Конечно у вас ничего не записывает.

И вот сдесь:

            for (int i = 0; i < str.length(); ++i)
            {
                str[i] += 1;
            }
            fout << str;

Это, я так понимаю вы шифруете, так? А что вы шифруете? Это ж пустая строка!!!

Вот я вам поправил кое-что, дальше сами:

#include <iostream>
#include <fstream>
#include <ctime>
#include <string>
using namespace std;
string Print(string &path);
void encryption(string &path, string &);
int main()
{
    setlocale(LC_ALL, "ru");
    string path;
    cout << "Enter the path of the file : ";
    cin >> path;
    cout << "Output file\n";
    string data = Print(path);
    std::cout << "data " << data << endl;
    encryption(path, data);
    Print(path);
    return 0;
}
string Print(string &path)
{
    ifstream fin;
    fin.open(path);
    string str;
    if (fin.is_open()) {
        getline(fin, str);
        cout << "\n" << str << endl;
        fin.close();
    }
    return str;
}
void encryption(string &path, string &d)
{
    ofstream fout;
    fout.open(path);
    if (!fout.is_open())
    {
        cout << "Error opening file\n";
        return;
    }
    else 
    {
        cout << "\nEncryption" << endl;
            for (int i = 0; i < d.length(); ++i)
            {
                d[i] += 1;
            }
            fout << d;
        fout.close();
    }
}
READ ALSO
Как сохранить toggle class, цвет элемента li

Как сохранить toggle class, цвет элемента li

Есть список ul li, который хранит в себе данные вписанные пользователем в формыДанные добавляются в li и в localStorage объект(данные не пропадают...

317
Фоновое видео YouTube на сайте

Фоновое видео YouTube на сайте

Сделал на сайте фоновое видео с YouTube, используя плагин jquerymb

274