При вводе имени и фамилии русскими буквами количество символов увеличивается в 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);
}

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

  1. #include Указывает включить в программу файл стандартного ввода/вывода
  2. #include Указывает включить в программу файл с определениями функций работы с локалью
  3. #include Указывает включить в программу файл с определениями функций работы со временем
  4. #include Указывает включить в программу файл с определениями широких символов
  5. int main() Определяет основную функцию программы, с которой начинается выполнение любой программы на C
  6. setlocale(LC_ALL, en_US.UTF-8); Устанавливает английскую локаль для всех категорий (LC_ALL) с использованием UTF-8 для обработки широких символов
  7. setlocale(LC_NUMERIC, de_DE); Устанавливает немецкую локаль для чисел (LC_NUMERIC)
  8. setlocale(LC_TIME, ja_JP); Устанавливает японскую локаль для даты и времени (LC_TIME)
  9. wchar_t str[100]; Объявляет переменную типа wchar_t с именем str и размером 100 символов
  10. time_t t = time(NULL); Получает текущее время и сохраняет его в переменной t типа time_t
  11. wcsftime(str, 100, L%A %c, localtime(&t)); Форматирует строку str в соответствии с текущим временем, используя формат %A %c, где %A - день недели, %c - день месяца
  12. wprintf(LNumber: %.2f\nDate: %Ls\n, 3.14, str); Выводит отформатированную строку на экран с помощью функции wprintf, где 3.14 - это число, которое необходимо вывести, а str - это отформатированная строка даты

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


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

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

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