Не читаемые символы при чтении файла из структуры "Товары"

У меня выводятся не читаемые символы на экран, когда я ввожу текст на русском:
В итоге в файл записываются какие-то непонятные мне символы: Введите описание изображения
Помогите мне, пожалуйста.
А вот файл, в который записывается данная структура: текстовый файл.
Вот исходный код программы:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

struct TovarNaSklade
    {
    string nazvanietovara;
    double zakupochnayacena;
    double rozprice;
    double tovarnayanacenka;
    };

int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_CTYPE, "Russian");
    const int n = 5;
    TovarNaSklade TovaryNaSklade[n];
    cout << "------------ Запись данных в файл ------------ \n";
    for(int i = 0; i < n; i++) 
    {
        cout << "Название товара: " << endl;
        cin >> TovaryNaSklade[i].nazvanietovara;
        cout << "Закупочная цена: " << endl;
        cin >> TovaryNaSklade[i].zakupochnayacena;
        cout << "Товарная наценка: " << endl;
        cin >> TovaryNaSklade[i].tovarnayanacenka;
        TovaryNaSklade[i].rozprice = TovaryNaSklade[i].zakupochnayacena * TovaryNaSklade[i].tovarnayanacenka * 0.01;
        cout << "\n";
     }

    double ucenka;
    cout << endl;
    cout << "Заданная цена: ";
    cin >> ucenka;
    for(int i = 0; i < n; i++)
    {
        if(TovaryNaSklade[i].rozprice > ucenka)
        {
            TovaryNaSklade[i].rozprice *= 0.8;
        }
    }

    // открытие файла для записи
    ofstream f1("C:\\Users\\User\\Downloads\\file1.txt",ios::binary|ios::out);
    if(!f1) // если файл не удалось создать, вывод сообщения об этом
    {
        cerr << "Файл не был создан. \n";
        return 0;
    }
    else // в противном случае
    {
        for (int i = 0; i < n; i++) // запись всех полей структуры в файл
        {
            f1.write(reinterpret_cast<char*>(&TovaryNaSklade[i]), sizeof(TovarNaSklade));
        }
    }
    f1.close(); // закрытие потока

    // открытие файла для чтения в двоичном формате
    ifstream f2("C:\\Users\\User\\Downloads\\file1.txt",ios::binary|ios::in);
    for (int i = 0; i < n; i++) // считываем данные в массив структур
        {
            f2.read(reinterpret_cast<char*>(&TovaryNaSklade[i]), sizeof(TovarNaSklade));
        }
    f2.close(); // закрытие потока

    cout << "------------ Считывание данных из файла ------------ \n";
    cout << "Товары в порядке возрастания розничной цены: " << endl;
    TovarNaSklade f;
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < i - 1; j++)
        {
            if(TovaryNaSklade[j].rozprice > TovaryNaSklade[j + 1].rozprice)
            {
                f = TovaryNaSklade[j];
                TovaryNaSklade[j] = TovaryNaSklade[j + 1];
                TovaryNaSklade[j + 1] = f;
            }
        }
    }
    for(int i = 0; i < n; i++)
    {
        cout << "Название товара: \n" << TovaryNaSklade[i].nazvanietovara << endl;
        cout << "Закупочная цена: \n" << TovaryNaSklade[i].zakupochnayacena << endl;
        cout << "Товарная наценка: \n" << TovaryNaSklade[i].tovarnayanacenka << endl;
        cout << "Розничная цена: \n" << TovaryNaSklade[i].rozprice << endl;
    }
    system("pause");
    return 0;
}

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.