Сравнение русских символов не работает - C (СИ)

Узнай цену своей работы

Формулировка задачи:

сейчас делаю черновик для более большой программы, но не получается различать введенные символы на русском с введённой строкой. Такая вещь, как эта setlocale(LC_ALL, "RUS"); помогает только выводить уже забитые строки в коде.
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
 
char *trans(char *str) //оператор для перевода символов в русский
{
    int i = 0;
while(str[i]!='\0')
{   
      switch(str[i])
        {
        case 128:
            str[i] = 'А';
            break;
        case 129:
            str[i] = 'Б';
            break;
        case 130:
            str[i] = 'В';
            break;
        case 131:
            str[i] = 'Г';
            break;
        case 132:
            str[i] = 'Д';
            break;
        case 133:
            str[i] = 'Е';
            break;
        case 134:
            str[i] = 'Ж';
            break;
        case 135:
            str[i] = 'З';
            break;
        case 136:
            str[i] = 'И';
            break;
        case 137:
            str[i] = 'Й';
            break;
        case 138:
            str[i] = 'К';
            break;
        case 139:
            str[i] = 'Л';
            break;
        case 140:
            str[i] = 'М';
            break;
        case 141:
            str[i] = 'Н';
            break;
        case 142:
            str[i] = 'О';
            break;
        case 143:
            str[i] = 'П';
            break;
        case 144:
            str[i] = 'Р';
            break;
        case 145:
            str[i] = 'С';
            break;
        case 146:
            str[i] = 'Т';
            break;
        case 147:
            str[i] = 'У';
            break;
        case 148:
            str[i] = 'Ф';
            break;
        case 149:
            str[i] = 'Х';
            break;
        case 150:
            str[i] = 'Ц';
            break;
        case 151:
            str[i] = 'Ч';
            break;
        case 152:
            str[i] = 'Ш';
            break;
        case 153:
            str[i] = 'Щ';
            break;
        case 154:
            str[i] = 'Ъ';
            break;
        case 155:
            str[i] = 'Ы';
            break;
        case 156:
            str[i] = 'Ь';
            break;
        case 157:
            str[i] = 'Э';
            break;
        case 158:
            str[i] = 'Ю';
            break;
        case 159:
            str[i] = 'Я';
            break;
        case 224:
            str[i] = 'а';
            break;
        case 161:
            str[i] = 'б';
            break;
        case 162:
            str[i] = 'в';
            break;
        case 163:
            str[i] = 'г';
            break;
        case 228:
            str[i] = 'д';
            break;
        case 165:
            str[i] = 'е';
            break;
        case 166:
            str[i] = 'ж';
            break;
        case 167:
            str[i] = 'з';
            break;
        case 168:
            str[i] = 'и';
            break;
        case 169:
            str[i] = 'й';
            break;
        case 170:
            str[i] = 'к';
            break;
        case 171:
            str[i] = 'л';
            break;
        case 172:
            str[i] = 'м';
            break;
        case 173:
            str[i] = 'н';
            break;
        case 174:
            str[i] = 'о';
            break;
        case 175:
            str[i] = 'п';
            break;
        case 224:
            str[i] = 'р';
            break;
        case 225:
            str[i] = 'с';
            break;
        case 226:
            str[i] = 'т';
            break;
        case 227:
            str[i] = 'у';
            break;
        case 228:
            str[i] = 'ф';
            break;
        case 229:
            str[i] = 'х';
            break;
        case 230:
            str[i] = 'ц';
            break;
        case 231:
            str[i] = 'ч';
            break;
        case 232:
            str[i] = 'ш';
            break;
        case 233:
            str[i] = 'щ';
            break;
        case 234:
            str[i] = 'ъ';
            break;
        case 235:
            str[i] = 'ы';
            break;
        case 236:
            str[i] = 'ь';
            break;
        case 237:
            str[i] = 'э';
            break;
        case 238:
            str[i] = 'ю';
            break;
        case 239:
            str[i] = 'я';
            break;
            
        }
        i++;
    }
        return str;
}
 
int main(void)
{
    setlocale(LC_ALL, "RUS");
 
    char str[64];
    puts("вы новичок?");
    for(int i=0;;i++)
    {
        gets(str);
        trans(str);
        if(strcmp(str, "да") == 0)
        {
            puts("ololo");
        }
    else puts(str);
    }

    getch();
    return 0;
}
Сам перевод этих символов получается(в введённой строке ( char str[64] ) после перевода висят символы), но они не те. Возможно, что не ту таблицу взял, посоветуте, кто знает)

Решение задачи: «Сравнение русских символов не работает»

textual
Листинг программы
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

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

  1. SetConsoleCP(1251); - Установка кодовой страницы консоли в Windows на UTF-8.
  2. SetConsoleOutputCP(1251); - Установка кодовой страницы вывода консоли в Windows на UTF-8.

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


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

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

12   голосов , оценка 4 из 5