Как ввести сообщение через консоль в класс wstring?
Появилась такая проблема, при вводе сообщения через wcin в классе wstring программа просто прекращается, не выдавая никаких ошибок. Если же присваиваю переменной значение в самом коде, то все работает нормально.
#include <string>
using namespace std;
wstring alphabet_one = L"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ ,абвгдеёжзийклмнопрстуфхцчшщъыь!?эюя;.-*";
wstring alphabet_two = L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[]{}$#@+=_*&^%, -abcdefghijklmnopqr|/tuvwxyz:!?.";
wstring alphabet_three = L"АБВГДЕЁЖЗИЙКЛМНОПРСТУ ,абвгдеёжзий-клмнопрстуфхцчшщъыьэюя;ФХЦЧШЩ|/ЪЫЬЭЮЯ.*";
wstring alphabet_four = L"STUVWXYZ[]{}$#@+=_*&^%, abcdABCDEFGHIJKLMNOPQRefghijk-lmnopqrst|/uvwxyz:!?";
wstring crypt ( const wstring& message, const wstring& alphabet_one, const wstring& alphabet_two, const wstring& alphabet_three, const wstring& alphabet_four)
{
wstring result;
for (int i = 0; i < message.length(); i += 3)
{
int index = alphabet_one.find(message[i]);
result += alphabet_two[index];
if (i + 1 < message.length())
{
unsigned long index = alphabet_one.find(message[i+1]);
result += alphabet_three[index];
}
if (i + 2 < message.length())
{
unsigned long index = alphabet_one.find(message[i+2]);
result += alphabet_four[index];
}
}
return result;
}
wstring decrypt ( const wstring& message, const wstring& alphabet_one, const wstring& alphabet_two, const wstring& alphabet_three, const wstring& alphabet_four)
{
wstring result;
for (int i = 0; i < message.length() - 1; i += 3)
{
unsigned long index = alphabet_two.find(message[i]);
result += alphabet_one[index];
if (i + 1 < message.length())
{
unsigned long index = alphabet_three.find(message[i+1]);
result += alphabet_one[index];
}
if (i + 2 < message.length())
{
unsigned long index = alphabet_four.find(message[i+2]);
result += alphabet_one[index];
}
}
return result;
}
int main()
{
ios_base::sync_with_stdio(false);
wcin.imbue(locale("en_US.UTF-8"));
wcout.imbue(locale("en_US.UTF-8"));
string var;
cout << "Действие, которое необходимо сделать: 1 - шифрование, 2 - расшифровка" << endl;
cin >> var;
wstring message = L"Активы программного обеспечения - это прикладное программное обеспечение, системное программное обеспечение, и др.";
if (var == "1")
{
wcout << crypt(message, alphabet_one, alphabet_two, alphabet_three, alphabet_four) << endl;
}
else
{
wcout << decrypt(message, alphabet_one, alphabet_two, alphabet_three, alphabet_four) << endl;
}
}```
Ответы (1 шт):
Автор решения: AlexGlebe
→ Ссылка
Потоки cout, ... в iostream могут работать только в одном режиме : или в char или wchar_t. Разные буфера и т.д.
Ваши первые записи cout << "Д.. переключают поток в char режим. И последующее использование wcout работать не будет.
Решение такое :
wstring wvar;
wcout << L"Действие, которое необходимо сделать: 1 - шифрование, 2 - расшифровка" << endl;
wcin >> wvar;
if (wvar == L"1")