Неправильная запись русского текста в файл C++

Рейтинг: 0Ответов: 0Опубликовано: 30.06.2023

Всем доброго времени суток!

Задали сделать программу для транслитерации (например: из текста "площадь" в текст "ploschad") из английского текста в русский, причём данные для транслитерации берутся из одного файла, и транслитерированный текст записывается в другой файл.

Сделал программу, но есть проблема: текст в файл русскими буквами записывается даже не какими-то каракулями, а одним символом. Кодировка обоих файлов UTF-8

Код:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <windows.h>
using namespace std;
 
void wrF(FILE* file, const char* a) {
    for (int i = 0; i < strlen(a); i++) {
        fputc(a[i], file);
    }
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char const* translit[52] = { "А","а","Б","б","Ц","ц","Д","д","Е","е","Ф","ф","Г","г","Х","х","И","и",
        "Ж","ж","К","к","Л","л","М","м","Н" ,"н","О","о","П","п" ,"КУ","ку","Р","р","С" ,"с","Т","т","У",
        "у","В","в","В","в","ИКС" ,"икс","Й","й","З","з"};
    char c;
    const char* a = NULL;
    int b;
    FILE* ish; 
    if ((ish = fopen("ishodnik.txt", "r")) == NULL) {
        cout << "Не удалось открыть файл!";
        exit(1);
    }
    FILE* res = fopen("result.txt", "w");
    while (!feof(ish)) {
        c = (char)fgetc(ish);
        b = (int)c;
        if ((b >= 65 && b <= 90) || (b >= 97 && b <= 122)) {
            switch (b) {
            case 65:
                c = translit[0][0];  //'A'
            case 66:
                c = translit[2][0];  //'B'
            case 67:
                c = translit[4][0];  //'C'
            case 68:
                c = translit[6][0];  //'D'
            case 69:
                c = translit[8][0];  //'E'
            case 70:
                c = translit[10][0]; //'F'
            case 71:
                c = translit[12][0]; //'G'
            case 72:
                c = translit[14][0]; //'H'
            case 73:
                c = translit[16][0]; //'I'
            case 74:
                c = translit[18][0]; //'J'
            case 75:
                c = translit[20][0]; //'K'
            case 76:
                c = translit[22][0]; //'L'
            case 77:
                c = translit[24][0]; //'M'
            case 78:
                c = translit[26][0]; //'N'
            case 79:
                c = translit[28][0]; //'O'
            case 80:
                c = translit[30][0]; //'P'
            case 81:
                a = translit[32];    //'Q'
            case 82:
                c = translit[34][0]; //'R'
            case 83:
                c = translit[36][0]; //'S'
            case 84:
                c = translit[38][0]; //'T'
            case 85:
                c = translit[40][0]; //'U'
            case 86:
                c = translit[42][0]; //'V'
            case 87:
                c = translit[44][0]; //'W'
            case 88:
                a = translit[46];    //'X'
            case 89:
                c = translit[48][0]; //'Y'
            case 90:
                c = translit[50][0]; //'Z'
            //             Маленькие буквы
            case 97:
                c = translit[1][0];  //'A'
            case 98:
                c = translit[3][0];  //'B'
            case 99:
                c = translit[5][0];  //'C'
            case 100:
                c = translit[7][0];  //'D'
            case 101:
                c = translit[9][0];  //'E'
            case 102:
                c = translit[11][0]; //'F'
            case 103:
                c = translit[13][0]; //'G'
            case 104:
                c = translit[15][0]; //'H'
            case 105:
                c = translit[17][0]; //'I'
            case 106:
                c = translit[19][0]; //'J'
            case 107:
                c = translit[21][0]; //'K'
            case 108:
                c = translit[23][0]; //'L'
            case 109:
                c = translit[25][0]; //'M'
            case 110:
                c = translit[27][0]; //'N'
            case 111:
                c = translit[29][0]; //'O'
            case 112:
                c = translit[31][0]; //'P'
            case 113:
                a = translit[33];    //'Q'
            case 114:
                c = translit[35][0]; //'R'
            case 115:
                c = translit[37][0]; //'S'
            case 116:
                c = translit[39][0]; //'T'
            case 117:
                c = translit[41][0]; //'U'
            case 118:
                c = translit[43][0]; //'V'
            case 119:
                c = translit[45][0]; //'W'
            case 120:
                a = translit[47];    //'X'
            case 121:
                c = translit[49][0]; //'Y'
            case 122:
                c = translit[51][0]; //'Z'
            }
        }
        if (b == 81 || b == 88 || b == 113 || b == 120) {
            wrF(res, a);
        }
        else {
            fputc(c, res);
        }
    }
    cout << "Программа завершила работу!";
}

Ответы

Ответов пока нет.