Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 11

VSCode не хочет принимать всю строку кирилицей

20.05.2018, 13:04. Показов 2459. Ответов 28

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня такая вот проблема. Не могу ввести и корректно обработать строку из 40-ка символов в VSCode да и других IDE. Если ввожу цифры или текст англ. раскладкой - всё ок. А как только ввожу предложение на русском (длинной 40 символов) оно принимает только 20, а в конце(иногда) выводит какой-то крокозяблик.
Листинг:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <string.h>
#include <stdio.h>
 
using namespace std;
 
struct NOTE
{
    char fio[40];
    char phone[15];
    int data[3];
} abonent;
 
void EnterData(int &);
 
int main()
{
    setlocale(LC_ALL, "Rus");
    int flag(0);
    EnterData(flag); 
    getchar();
    return 0;
}
void EnterData(int &flag)
{
        cout << "\nВведите ФИО абонента: ";
        fgets(abonent.fio, 39, stdin);
        puts(abonent.fio);
        getchar();
}
Вот что получается при вводе кирилицы и при вводе буквами латинского алфавита.
Памагите, форумчане....
Миниатюры
VSCode не хочет принимать всю строку кирилицей   VSCode не хочет принимать всю строку кирилицей  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2018, 13:04
Ответы с готовыми решениями:

Элемент массива не хочет принимать значение
Здравствуйте, нужна помощь опытных кодеров. В чем проблема, я создал text : array of string и по кнопке должен выполнятся код ...

Компилятор не хочет принимать функцию dalay()/Sleep() и т.д
Доброго времени суток, компилятор не принимает функции delay() или Sleep(), таже он не принимает Beep(); в ошибке пишет delay was not...

Метод Зейделя. Не хочет принимать третий аргумент
Привет. Вот такое на данный момент записано: http://cs633626.vk.me/v633626350/1аbfb/A7v_i-PLDp0.jpg Не хочет принимать третий...

28
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
20.05.2018, 13:14
Может буфер маловат? Кто его знает в какой кодировке там строка хранится...
И почему не используете std:string/wstring вместо массивов?
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 11
20.05.2018, 13:15  [ТС]
Так что делать тогда??
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
20.05.2018, 13:17
Цитата Сообщение от Komatosik Посмотреть сообщение
Так что делать тогда??
Увеличить? Отказаться от массивов?
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 11
20.05.2018, 13:21  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Может буфер маловат? Кто его знает в какой кодировке там строка хранится...
И почему не используете std:string/wstring вместо массивов?
Цитата Сообщение от Someone007 Посмотреть сообщение
Может буфер маловат?
И как тогда это исправить? И проверить проблема в этом или нет?..
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 11
20.05.2018, 13:25  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
И почему не используете std:string/wstring вместо массивов?
Можно подробнее об этом.
И я вот добавил пару строк кода теперь вот что:
Миниатюры
VSCode не хочет принимать всю строку кирилицей  
0
 Аватар для NightSkyLark
21 / 21 / 22
Регистрация: 13.05.2018
Сообщений: 71
20.05.2018, 13:33
Цитата Сообщение от Someone007 Посмотреть сообщение
Цитата Сообщение от Komatosik Посмотреть сообщение
Так что делать тогда??
Увеличить?
Уже подсказали, попробуйте увеличить
C++
1
2
 char fio[256];
 char phone[256];
Значит под один символ отводится более одного байта и
длины массивов просто не хватает.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
20.05.2018, 13:35
Лучший ответ Сообщение было отмечено Komatosik как решение

Решение

Цитата Сообщение от Komatosik Посмотреть сообщение
Можно подробнее об этом.
C++
1
2
3
4
5
6
7
8
9
    std::string fio;
    std::string phone;
 
    std::getline(std::cin, fio);
    std::getline(std::cin, phone);
 
    std::cout << fio;
    std::cout << std::endl;
    std::cout << phone;
C++
1
2
3
4
5
6
7
8
9
    std::wstring fio;
    std::wstring phone;
 
    std::getline(std::wcin, fio);
    std::getline(std::wcin, phone);
 
    std::wcout << fio;
    std::wcout << std::endl;
    std::wcout << phone;
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 11
20.05.2018, 14:10  [ТС]
Хорошо, это сработало, но как мне контролировать длинну ввода? Или при вводе ограничить кол-во вводимых символов можно??
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
20.05.2018, 14:16
Цитата Сообщение от Komatosik Посмотреть сообщение
Хорошо, это сработало, но как мне контролировать длинну ввода? Или при вводе ограничить кол-во вводимых символов можно??
Зачем?
Ну и строку обрезать можно если она слишком длинная...
0
 Аватар для NightSkyLark
21 / 21 / 22
Регистрация: 13.05.2018
Сообщений: 71
20.05.2018, 14:17
Что сработало ? И зачем ограничивать (если со string сработало )?
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 11
20.05.2018, 14:27  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Зачем?
Ну и строку обрезать можно если она слишком длинная...
А как сделать это? Я присваиваю 39-му байту '\0' и просто выводится крокозяблик.
З.Ы. Я до этого не работал со строками, а только с массивами символов.

Добавлено через 38 секунд
Цитата Сообщение от NightSkyLark Посмотреть сообщение
Что сработало ? И зачем ограничивать (если со string сработало )?
Чтобы пользователь не ввёл 100500 символов и программа "полетела"..
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
20.05.2018, 14:31
Цитата Сообщение от Komatosik Посмотреть сообщение
А как сделать это?
C++
1
2
    if (fio.size() > 40)
        fio.erase(40);
Цитата Сообщение от Komatosik Посмотреть сообщение
Чтобы пользователь не ввёл 100500 символов и программа "полетела"..
Ничего не полетит.
0
 Аватар для NightSkyLark
21 / 21 / 22
Регистрация: 13.05.2018
Сообщений: 71
20.05.2018, 14:33
Цитата Сообщение от Komatosik Посмотреть сообщение
Чтобы пользователь не ввёл 100500 символов и программа "полетела"..
Она не полетит. Запишется только сколько влезет.
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 11
20.05.2018, 14:36  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
C++
1
2
    if (fio.size() > 40)
        fio.erase(40);

Ничего не полетит.
Итак вопрос остаётся открытым..
Миниатюры
VSCode не хочет принимать всю строку кирилицей  
0
 Аватар для NightSkyLark
21 / 21 / 22
Регистрация: 13.05.2018
Сообщений: 71
20.05.2018, 14:38
Цитата Сообщение от Komatosik Посмотреть сообщение
так вопрос остаётся открытым..
Кстати да. Такая трабла только в VS Code

Добавлено через 50 секунд
Komatosik, ну сделать всё на английском и забить...
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
20.05.2018, 14:49
Цитата Сообщение от NightSkyLark Посмотреть сообщение
ну сделать всё на английском и забить...
Или считывать строку как есть.

Komatosik, почему вы решили что длинна должна быть ограничена именно 40 символами? Ведь бывают и длиннее ФИО...
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 11
20.05.2018, 14:51  [ТС]
Чтобы я смог это всё дело потом в таблицу вывести..

Добавлено через 48 секунд
Цитата Сообщение от NightSkyLark Посмотреть сообщение
Кстати да. Такая трабла только в VS Code

Добавлено через 50 секунд
Komatosik, ну сделать всё на английском и забить...
Что можно вместо VSCode, чтобы не было траблы?
Или может её можно исправить\обойти??
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
20.05.2018, 14:54
Цитата Сообщение от Komatosik Посмотреть сообщение
Что можно вместо VSCode, чтобы не было траблы?
Не думаю что проблема в VSCode. Это просто текстовый редактор. От него работа программы никак не зависит.
Скорее всего это какая-то особенность Linux или компилятора который вы используете.
1
 Аватар для NightSkyLark
21 / 21 / 22
Регистрация: 13.05.2018
Сообщений: 71
20.05.2018, 14:56
Цитата Сообщение от Komatosik Посмотреть сообщение
Что можно вместо VSCode, чтобы не было траблы?
CLion например. пока без проблем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.05.2018, 14:56
Помогаю со студенческими работами здесь

Контейнер map. Итератор не хочет принимать значение rbegin()
Почему этот кусок кода for(it=m.rbegin(),i=q;it!=m.rend();it--,i--) выбивает ошибку? Приmultimap&lt;int,string&gt; m; ...

Программа при запуске не хочет принимать и выводить формулу
Добрый день.При отладке программы после ввода значений а и б программа не выводит формулу(фото).В чем ошибка? ...

Больня тема. Яндекс не хочет принимать на индексацию сайт.
Здравствуйте, возникла проблема, а именно: Сайт www.1zona.ru с конца апреля до начала июля где-то начался отток переходов с яндекса,...

Компьютер не хочет принимать видеокарту 8600 gt - просто черный экран
здравствуйте! у меня компьютер не хочет принимать видеокарту 8600 gt, хотя раньше она работала а сейчас при включении на мониторе ничего не...

Компилятор не хочет принимать переменную как значение длины массива visual C++
Код // ConsoleApplication2.cpp : Этот файл содержит функцию &quot;main&quot;. Здесь начинается и заканчивается выполнение программы. // ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru