Программа не работает с кириллицей - C (СИ)
Формулировка задачи:
Привет.
У меня программа - транслитерация.
У меня такой вопрос: почему когда я ввожу сочинение с
клавиатуры, транслитерация не правильно работает, выводит иероглифыю?
#include <stdio.h> #include <windows.h> #include <locale.h> #include <conio.h> void ToTranslate(char *srcStr, char *resultStr); void Clear(char *str); int main() { setlocale(LC_ALL, "Russian"); FILE *f = NULL; //вказiвник на вiдкриваючий файл int choice=0; //зміна для збереження вибору char srcStr[256]={0}; //стрiчка, зчитана з файлу або з клавiатури char resultStr[512]={0};//буфер result, для внесення переведеної стрічки do { system("cls"); printf("\t\tПрограма переводy українського тексту в транслiт\n\n"); printf(" 1. Перевiд з файлу \n"); printf(" 2. Перевiд з клавiатури \n"); printf("Esc. Вихiд\n"); choice=getch(); if(choice==27) { printf("\n\t\t\t\tДо побачення !\n\n"); system("pause"); exit(1); } else if(choice==49) { system("cls"); printf("\n\t\t\tВибраний режим переводу з файлу\n\n"); if(!(f = fopen("C:\\file.txt","r")))//спроба вiдкрити { printf("Файл не знайдено! \n"); break; } printf("\nРезультат переводу: \n\n"); while(!feof(f))//доки не досягнуто кінця файлу зчитуємо дані { fgets(srcStr,256,f);//прочитали cтрічку ToTranslate(srcStr,resultStr);//перевели і записали в result printf("%s",resultStr);//вивели переклад Clear(resultStr);//очистили стрічку, для того, щоб текст при наступному кроці циклу не дублювався } Clear(resultStr); Clear(srcStr); fclose(f); printf("\n\n\t\tДля повернення в меню натиснiть будь-яку кнопку\n\n"); getch(); } else if(choice==50) { system("cls"); printf("\n\t\t\tВибраний режим переводу з клавiатури\n\n"); printf("Введiть речення для переводу: \n"); gets(srcStr); ToTranslate(srcStr,resultStr);//переводимj стрічку і записуємо в resultStr printf("\nРезультат переводy:\n%s",resultStr); printf("\n\n\t\tДля повернення в меню натиснiть будь-яку кнопку\n\n"); getch(); Clear(resultStr); Clear(srcStr); } }while(1); } void ToTranslate(char *srcStr, char *resultStr) { char temp[2]={0}; for(int i=0;i<strlen(srcStr);i++) { switch(srcStr[i]) { case 'а': strcat(resultStr,"a"); break; case 'б': strcat(resultStr,"b"); break; case 'в': strcat(resultStr,"v"); break; case 'г': strcat(resultStr,"h"); break; case 'ґ': strcat(resultStr,"g"); break; case 'д': strcat(resultStr,"d"); break; case 'е': strcat(resultStr,"e"); break; case 'є': strcat(resultStr,"ye"); break; case 'ж': strcat(resultStr,"zh"); break; case 'з': strcat(resultStr,"z"); break; case 'и': strcat(resultStr,"y"); break; case 'і': strcat(resultStr,"i"); break; case 'ї': strcat(resultStr,"yi"); break; case 'й': strcat(resultStr,"y"); break; case 'к': strcat(resultStr,"k"); break; case 'л': strcat(resultStr,"l"); break; case 'м': strcat(resultStr,"m"); break; case 'н': strcat(resultStr,"n"); break; case 'о': strcat(resultStr,"o"); break; case 'п': strcat(resultStr,"p"); break; case 'р': strcat(resultStr,"r"); break; case 'с': strcat(resultStr,"s"); break; case 'т': strcat(resultStr,"t"); break; case 'у': strcat(resultStr,"u"); break; case 'ф': strcat(resultStr,"f"); break; case 'х': strcat(resultStr,"kh"); break; case 'ц': strcat(resultStr,"ts"); break; case 'ч': strcat(resultStr,"ch"); break; case 'ш': strcat(resultStr,"sh"); break; case 'щ': strcat(resultStr,"shch"); break; case 'ь': strcat(resultStr,"''"); break; case 'ю': strcat(resultStr,"yu"); break; case 'я': strcat(resultStr,"ya"); break; case 'А': strcat(resultStr,"A"); break; case 'Б': strcat(resultStr,"B"); break; case 'В': strcat(resultStr,"V"); break; case 'Г': strcat(resultStr,"H"); break; case 'Ґ': strcat(resultStr,"G"); break; case 'Д': strcat(resultStr,"D"); break; case 'Е': strcat(resultStr,"E"); break; case 'Є': strcat(resultStr,"Ye"); break; case 'Ж': strcat(resultStr,"Zh"); break; case 'З': strcat(resultStr,"Z"); break; case 'И': strcat(resultStr,"Y"); break; case 'І': strcat(resultStr,"I"); break; case 'Ї': strcat(resultStr,"Yi"); break; case 'Й': strcat(resultStr,"Y"); break; case 'К': strcat(resultStr,"K"); break; case 'Л': strcat(resultStr,"L"); break; case 'М': strcat(resultStr,"M"); break; case 'Н': strcat(resultStr,"N"); break; case 'О': strcat(resultStr,"O"); break; case 'П': strcat(resultStr,"P"); break; case 'Р': strcat(resultStr,"R"); break; case 'С': strcat(resultStr,"S"); break; case 'Т': strcat(resultStr,"T"); break; case 'У': strcat(resultStr,"U"); break; case 'Ф': strcat(resultStr,"F"); break; case 'Х': strcat(resultStr,"Kh"); break; case 'Ц': strcat(resultStr,"Ts"); break; case 'Ч': strcat(resultStr,"Ch"); break; case 'Ш': strcat(resultStr,"Sh"); break; case 'Щ': strcat(resultStr,"Shch"); break; case 'Ь': strcat(resultStr,"''"); break; case 'Ю': strcat(resultStr,"Yu"); break; case 'Я': strcat(resultStr,"Ya"); break; default: temp[0] = srcStr[i]; temp[1] = 0; strcat(resultStr,temp); break; } } } void Clear(char *str) { for(int i=0;i<strlen(str);i++) { str[i]=0; } }
Решение задачи: «Программа не работает с кириллицей»
textual
Листинг программы
SetConsoleCP(1251); SetConsoleOutputCP(1251);
Объяснение кода листинга программы
- Установка кодовой страницы для консоли ввода и вывода на 1251 (Windows Cyrillic) с помощью функций SetConsoleCP и SetConsoleOutputCP.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д