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

Ввод данных с консоли

15.12.2020, 14:58. Показов 1956. Ответов 5
Метки c++ (Все метки)

Author24 — интернет-сервис помощи студентам
Как сделать ввод данных в этом коде через консоль, а не через сам код?
Можете объяснить за что отвечает каждый блок и как он работает?
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <stdio.h>
#include <stdlib.h>
#include <exception>
#include <locale.h>
#include <iostream>
#include <string>
 
#include <windows.h>
#include <wrl.h>
#include <Spellcheck.h>
 
//кидает исключение, если HRESULT является ошибкой
inline void HR(HRESULT const result)
{
    if (S_OK != result) {
        wprintf(L"Error HRESULT 0x%x!!!\n", (UINT)result);
        throw std::exception();
    }
}
 
//выполняет проверку орфографии в тексте и возвращает число ошибок
int SpellCheck(LPCWSTR text) {
    Microsoft::WRL::ComPtr<ISpellCheckerFactory> factory;
 
    HR(CoCreateInstance(__uuidof(SpellCheckerFactory), nullptr,
        CLSCTX_INPROC_SERVER, __uuidof(factory),
        reinterpret_cast<void**>(factory.GetAddressOf())));
 
    BOOL supported = FALSE;
 
    HR(factory->IsSupported(L"ru-RU",
        &supported));
 
    if (supported == FALSE) {
        printf("Fatal error: Russian language not supported!\n");
        throw std::exception();
    }
 
    Microsoft::WRL::ComPtr<ISpellChecker> checker;
    HR(factory->CreateSpellChecker(L"ru-RU",
        checker.GetAddressOf()));
 
    int n_errors = 0;
 
    Microsoft::WRL::ComPtr<IEnumSpellingError> errors;
    HR(checker->Check(text,
        errors.GetAddressOf()));
 
    for (;;)
    {
        Microsoft::WRL::ComPtr<ISpellingError> error;
 
        if (S_OK != errors->Next(error.GetAddressOf()))
        {
            break;
        }
 
        n_errors++;
 
        ULONG startIndex;
        HR(error->get_StartIndex(&startIndex));
 
        ULONG length;
        HR(error->get_Length(&length));
 
        std::wstring word(text + startIndex,
            text + startIndex + length);
        std::wcout << L"Ошибка в слове: " << word << std::endl;
 
        CORRECTIVE_ACTION action;
        HR(error->get_CorrectiveAction(&action));
 
 
        if (action == CORRECTIVE_ACTION_GET_SUGGESTIONS) {
            std::wcout << L" (Варианты исправления: ";
            Microsoft::WRL::ComPtr<IEnumString> suggestions;
 
            HR(checker->Suggest(word.c_str(),
                suggestions.GetAddressOf()));
 
            for (;;)
            {
                wchar_t* suggestion;
 
                if (S_OK != suggestions->Next(1, &suggestion, nullptr))
                {
                    break;
                }
 
                // Add the suggestion to a list for presentation
                std::wcout << suggestion << L" ";
 
                CoTaskMemFree(suggestion);
            }
            std::wcout << L")" << std::endl;
        }
        std::wcout << std::endl;
    }
 
    return n_errors;
}
 
int main(int argc, char** argv)
{
    setlocale(LC_ALL, "Russian");
    HR(CoInitializeEx(nullptr, COINIT_MULTITHREADED));
 
    auto text = L"Автобус";
    std::wcout << text << std::endl;
    std::wcout << L"*********************************" << std::endl;
 
    auto res = SpellCheck(text);
 
    std::wcout << L"*********************************" << std::endl;
    std::wcout << L"Всего ошибок: " << res << std::endl;
 
    getchar();
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2020, 14:58
Ответы с готовыми решениями:

Пропускает ввод данных в консоли. Не работает часть кода. Пропускает ввод фио
Добрый день! Помогите пожалуйста! В void add_dinamo() пропускает cout&lt;&lt;&quot;ФИО: \t&quot; ;...

Ввод данных в консоли
При вводе в консоль названия элемента, должна выводиться его плотность. Когда ввожу имена элементов...

Ввод данных в консоли
#include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;locale.h&gt; #include &lt;stdlib.h&gt; #include...

Меню в консоли - Ввод данных
Доброй ночи Просьба не судить строго мой код - я только учусь! Вот код меню: #include...

5
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
15.12.2020, 15:03 2
Цитата Сообщение от Uchu Посмотреть сообщение
Как сделать ввод данных в этом коде через консоль, а не через сам код?
Цитата Сообщение от Uchu Посмотреть сообщение
auto text = L"Автобус";
    std::wcout << text << std::endl;
C++
1
2
3
4
5
std::wcout << L"Input text: ";
 
std::wstring text;
std::wcin >> text;
std::wcout << text << std::endl;
1
1 / 1 / 1
Регистрация: 04.06.2020
Сообщений: 50
15.12.2020, 15:15  [ТС] 3
Ошибка E0413 не существует подходящей функции преобразования из "std::wstring" в "LPCWSTR" 8стрк
Ошибка C2664 "int SpellCheck(LPCWSTR)": невозможно преобразовать аргумент 1 из "std::wstring" в "LPCWSTR" 8стрк
Ошибка C3536 res: не может использоваться до инициализации 11стрк

C++
1
2
3
4
5
6
7
8
9
10
11
 std::wcout << L"Input text: ";
 
    std::wstring text;
    std::wcin >> text;
    std::wcout << text << std::endl;
    std::wcout << L"*********************************" << std::endl;
 
    auto res = SpellCheck(text);
 
    std::wcout << L"*********************************" << std::endl;
    std::wcout << L"Всего ошибок: " << res << std::endl;
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
15.12.2020, 15:17 4
Цитата Сообщение от Uchu Посмотреть сообщение
Ошибка E0413 не существует подходящей функции преобразования из "std::wstring" в "LPCWSTR" 8стрк
C++
1
auto res = SpellCheck(text.c_str());
1
1 / 1 / 1
Регистрация: 04.06.2020
Сообщений: 50
15.12.2020, 15:21  [ТС] 5
Теперь просто перестал выводить текст на русском в понятном формате. Но все работает
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
15.12.2020, 15:23 6
Лучший ответ Сообщение было отмечено Uchu как решение

Решение

Цитата Сообщение от Uchu Посмотреть сообщение
Теперь просто перестал выводить текст на русском в понятном формате. Но все работает
Добавь в main, в начало
C++
1
2
    ::SetConsoleCP(1251);
    ::SetConsoleOutputCP(1251);
1
15.12.2020, 15:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2020, 15:23
Помогаю со студенческими работами здесь

Пропускает ввод данных в консоли
Доброго времени суток. Работа со списками. Мне нужно оформить данные об автобусах, введенные с...

Как прекратить ввод данных из консоли
Программа должна считывать пары точек (x, y), но заранее не известно количество пар. Как сделать...

Перевод каретки и ввод данных в консоли
Хотелось бы ввести данные в две строки за один раз... В простейшем случае пример выглядит так: ...

Перевод каретки и ввод данных в консоли
Хотелось бы ввести данные в две строки за один раз... В простейшем случае пример выглядит так: ...

Ввод в консоли
Возникла проблема: необходимо при вводе в консоли сделать так, чтобы при нажатии enter вводил...

Ввод данных с консоли
Добрый день! Такой вопрос - какой лучше метод использовать для ввода данных с консоли, которые...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru