Консольная программа не работает с кириллицей - C (СИ)

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

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

Читаю книгу Кернигана и Ритчи "Язык программирования Си", попутно выполняя задания и пробуя задания из примеров. Переписал find (подобие grep) из главы 5.10 - работает, но не с русскими символами. Например, если ее запустить командой find го, то строку "егор" не найдет. В чем может быть причина. Собственно мой вариант программы:
#include <stdio.h>
#include <string.h>
 
#define MAXLINE 1000
 
/* find: вывод строк, содержащих образец из последнего аргумента */
int main(int argc, char *argv[])
{
    char line[MAXLINE];
    int len;
    int found = 0; // Счетчик строк, удовлетворяющих условиям
    int lineno = 0; // Счетчик прочитаных строк
    int except = 0; // (except) 1 => вывод строк, где нет PATTERN
    int number = 0; // (number) 1 => нумеровать строки
    int c;
    
    while (--argc > 0 && (*++argv)[0] == '-')
        while (c = *++argv[0])
        switch (c) {
            case 'x':
                except = 1;
                break;
            case 'n':
                number = 1;
                break;
            default:
                printf("find: illegal option %c\n", c);
                argc = 0;
                found = -1;
                break;
        }
    
    if (argc != 1)
        printf("Usage: find [OPTION] [PATTERN]\n"
                "\t -x (except) show strings in which there is no PATTERN\n"
                "\t -n (number) show the line number");
    else
        while (fgets(line, MAXLINE, stdin) && strlen(line) > 1) {
            lineno++;
            if ((strstr(line, *argv) != NULL) != except) {
                if (number)
                    printf("%d: ", lineno);
                printf("%s", line);
                found++;
            }
        }   
    return found;
}

Решение задачи: «Консольная программа не работает с кириллицей»

textual
Листинг программы
setlocale(LC_ALL,"RU");

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

  1. Устанавливается локальная настройка для русского языка с помощью функции setlocale().
  2. В аргументах функции указывается LC_ALL, что означает, что мы хотим установить локаль для всех категорий (всего их может быть до 11).
  3. В кавычках указывается код локализации, в данном случае RU для русского языка.

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


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

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

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