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


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: ввод-вывод в "С" кириллицы строкой  (Прочитано 1876 раз)

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

Оффлайн dio4

  • Автор темы
  • Любитель
  • *
  • Сообщений: 65
  • Software is like sex: it's better when it's free
    • Просмотр профиля
    • Документация FreeBSD, Linux, Cisco
Добрый день. Прошу извинить, если тема не нова. Есть код:
#include <stdio.h>
#include <locale.h>
#include <wchar.h>

int main(void)
{
  wchar_t wch;
  puts("Введите русские буквы без пробелов");
  wscanf(L"%s", &wch);
  wprintf(L"Элемент %s\n", wch);
  return 0;
}
но он не работает. Не выводит в консоли введенные подряд русские символы. Помогите разобраться.

Онлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5583
  • Все по палатам!
    • Просмотр профиля
Re: ввод-вывод в "С" кириллицы строкой
« Ответ #1 : 26 Июля 2016, 16:10:30 »
Как-то так
#include <stdio.h>
#include <locale.h>
#include <wchar.h>

int main(void)
{
  wchar_t wch[256];
  if (! setlocale(LC_ALL, "ru_RU.utf8"))
  return 1;
  wprintf(L"Введите русские буквы без пробелов: ");
  wscanf(L"%s", wch);
  wprintf(L"\nЭлемент %s\n", wch);
  return 0;
}
Извините, я все еще учусь

Оффлайн dio4

  • Автор темы
  • Любитель
  • *
  • Сообщений: 65
  • Software is like sex: it's better when it's free
    • Просмотр профиля
    • Документация FreeBSD, Linux, Cisco
Re: ввод-вывод в "С" кириллицы строкой
« Ответ #2 : 27 Июля 2016, 10:20:19 »
Спасибо. Строка в массив вводится и выводится. Теперь проблема с вводом одиночного символа и его выводом. Код почти тот-же:
#include <stdio.h>
#include <locale.h>
#include <wchar.h>

int main(void)
  {
    setlocale(LC_ALL, "ru_RU.utf8");
    wchar_t wch;
    puts("Введите русскую букву:");
    wscanf(L"%c", &wch);
    wprintf(L"Элемент %c\n", wch);
    return 0;
  }
При компиляции ошибок не выдает, но и не выводит ничего на консоль при запуске. Спасибо заранее, если будет помощь.

Онлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5583
  • Все по палатам!
    • Просмотр профиля
Re: ввод-вывод в "С" кириллицы строкой
« Ответ #3 : 27 Июля 2016, 12:27:10 »
dio4, Прочитай и исправь
http://www.cplusplus.com/reference/cwchar/wscanf/
Не используй совместно puts и wprintf, я же не зря поменял (man puts - раздел bugs)
 wprintf(L"Введите русские буквы без пробелов: ");
Извините, я все еще учусь

Оффлайн dio4

  • Автор темы
  • Любитель
  • *
  • Сообщений: 65
  • Software is like sex: it's better when it's free
    • Просмотр профиля
    • Документация FreeBSD, Linux, Cisco
Re: ввод-вывод в "С" кириллицы строкой
« Ответ #4 : 27 Июля 2016, 13:45:28 »
Спасибо SergeyIT, разобрался. Сразу не "допетрил", что к чему  :) Правильно так:
int main(void)
{
  setlocale(LC_ALL, "ru_RU.utf8");
  wchar_t wch;
  wprintf(L"Введите букву:\n");
  wscanf(L"%lc", &wch);
  wprintf(L"\nЭлемент %lc\n", wch);
  return 0;
}
Таким образом, решено два вопроса - ввод вывод кириллицы в виде строки и одиночных символов, что очень важно. Еще раз спасибо.
« Последнее редактирование: 27 Июля 2016, 13:47:19 от dio4 »

 

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