Программа не работает с кириллицей - 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);

Объяснение кода листинга программы

  1. Установка кодовой страницы для консоли ввода и вывода на 1251 (Windows Cyrillic) с помощью функций SetConsoleCP и SetConsoleOutputCP.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5
Похожие ответы