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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

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

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;
}

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

Оффлайн john1400

  • Активист
  • *
  • Сообщений: 582
  • 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

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

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

 

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