Неправильная запись русского текста в файл C++
Всем доброго времени суток!
Задали сделать программу для транслитерации (например: из текста "площадь" в текст "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 << "Программа завершила работу!";
}
Источник: Stack Overflow на русском