Консольная программа не работает с кириллицей - 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");
Объяснение кода листинга программы
- Устанавливается локальная настройка для русского языка с помощью функции setlocale().
- В аргументах функции указывается LC_ALL, что означает, что мы хотим установить локаль для всех категорий (всего их может быть до 11).
- В кавычках указывается код локализации, в данном случае
RU
для русского языка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д