Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Code::Blocks. Использование кириллических символов в scanf().  (Прочитано 1682 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Motoroller

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Здравствуйте!

Возникла необходимость повторить примеры из книги Грега Перри и Дина Миллера "Программирование на C для начинающих" (2015 г. 3-е изд.). В качестве IDE в книге используется Code::Blocks.

Простейшие примеры воспроизводятся без каких-либо проблем, т.к. файлы в проекте сохраняются в кодировке UTF-8 и с ВЫВОДОМ символов кириллицы в консоль проблем нет.

Следующий пример при ВВОДЕ символов кириллицы в переменные типа char с использованием функции scanf() естественно обрабатывается некорректно, т.к. тип char - однобайтный, а UTF-8 кодирует кириллицу в 2 байта.

#include <stdio.h>

int main()
{
    char firstInitial;
    char lastInitial;
    int age;
    int favoriteNumber;

    printf("С какой буквы начинается Ваша фамилия?\n");
    scanf(" %c", &lastInitial);

    printf("С какой буквы начинается Ваше имя?\n");
    scanf(" %c", &firstInitial);

    printf("Сколько Вам лет?\n");
    scanf(" %d", &age);

    printf("Какое Ваше любимое число? (Только целое)\n");
    scanf(" %d", &favoriteNumber);

    printf("\n\nВаши инициалы: %c.%c., и Вам %d лет.", firstInitial, lastInitial, age);
    printf("\nВаше любимое число %d.\n\n", favoriteNumber);

    return 0;
}

Подскажите, что нужно сделать, чтобы предыдущий пример кода корректно обработал символы кириллицы?

ТС не появлялся на Форуме более полугода по состоянию на 13/07/2019 (последняя явка: 22/02/2016). Модератором раздела принято решение закрыть тему.
--zg_nico
« Последнее редактирование: 13 Июля 2019, 22:25:08 от zg_nico »

Оффлайн john1400

  • Активист
  • *
  • Сообщений: 581
  • debian
    • Просмотр профиля
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define L 15

int main(int argc, char *argv[]){

    char *query = getenv("QUERY_STRING");
    char body[L] = " ";

    system("chcp 1251 > nul"); // 1251 - windows-1251, 65001 - utf-8
    strcat(body, "вапвкап ап");
    printf("%s%c%c\n%s", "Content-Type:text/html;charset=utf-8",13,10, body);
    getchar();
    return 0;
http://forum.antichat.ru/threads/101485/
« Последнее редактирование: 22 Февраля 2016, 06:54:16 от john1400 »

Оффлайн Motoroller

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
john1400, спасибо! Ушёл думать и разбираться.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Motoroller,
Цитировать
system("chcp 1251 > nul");

system("chcp 1251 > /dev/null");
Wars ~.o

 

Страница сгенерирована за 0.051 секунд. Запросов: 23.