При вводе имени и фамилии русскими буквами количество символов увеличивается в 2 раза - C (СИ)
Формулировка задачи:
При вводе имени и фамилии английскими буквами все работает нормально.
Но при вводе имени и фамилии русскими буквами количество символов увеличивается в 2 раза.
Например:
Иван Петров
8 12
Компилятор gcc.
#include <stdio.h> #include <string.h> int main (){ char name [10]; char surname [10]; int i; int f; scanf ("%s", name); //Ввести имя scanf ("%s", surname); //Ввести фамилию printf ("%-10s %-10s\n", surname, name); //Вывод по левому краю i = strlen(name); // Количество символов в имени f = strlen(surname); // Количество символов в фамилии printf ("%-10d %-10d\n", f, i); // Вывод количества символов в слове по левому карю return 0; }
Решение задачи: «При вводе имени и фамилии русскими буквами количество символов увеличивается в 2 раза»
textual
Листинг программы
#include <stdio.h> #include <locale.h> #include <time.h> #include <wchar.h> int main() { setlocale(LC_ALL, "en_US.UTF-8"); // the C locale will be the UTF-8 enabled English setlocale(LC_NUMERIC, "de_DE"); // decimal dot will be German setlocale(LC_TIME, "ja_JP"); // date/time formatting will be Japanese wchar_t str[100]; time_t t = time(NULL); wcsftime(str, 100, L"%A %c", localtime(&t)); wprintf(L"Number: %.2f\nDate: %Ls\n", 3.14, str); }
Объяснение кода листинга программы
- #include
Указывает включить в программу файл стандартного ввода/вывода - #include
Указывает включить в программу файл с определениями функций работы с локалью - #include
Указывает включить в программу файл с определениями функций работы со временем - #include
Указывает включить в программу файл с определениями широких символов - int main() Определяет основную функцию программы, с которой начинается выполнение любой программы на C
- setlocale(LC_ALL,
en_US.UTF-8
); Устанавливает английскую локаль для всех категорий (LC_ALL) с использованием UTF-8 для обработки широких символов - setlocale(LC_NUMERIC,
de_DE
); Устанавливает немецкую локаль для чисел (LC_NUMERIC) - setlocale(LC_TIME,
ja_JP
); Устанавливает японскую локаль для даты и времени (LC_TIME) - wchar_t str[100]; Объявляет переменную типа wchar_t с именем str и размером 100 символов
- time_t t = time(NULL); Получает текущее время и сохраняет его в переменной t типа time_t
- wcsftime(str, 100, L
%A %c
, localtime(&t)); Форматирует строку str в соответствии с текущим временем, используя формат%A %c
, где %A - день недели, %c - день месяца - wprintf(L
Number: %.2f\nDate: %Ls\n
, 3.14, str); Выводит отформатированную строку на экран с помощью функции wprintf, где 3.14 - это число, которое необходимо вывести, а str - это отформатированная строка даты
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д