Есть код на С++. В коде использую
wchar_t, кодировка UTF-8, компилятор gcc version 9.4.0, OS Ubuntu.
---Проблема---
Строки в исходном коде имеют вид:
L"Введите сумму современной валюты \n"
,
но после компиляции, в консоль выводит:
Vvedite summu sovremennoj valyuty`
Из за чего это происходит и как от этого избавится?
---
Code// "Старовалютный преобразователь"
// Преобразовывает старое значение Британской валюты
// в эквивалентную современному курсу сумму.
#include <iostream>
#include <iomanip>
#include <math.h>
bool get_currency(const wchar_t *prompt, const wchar_t *err_message, int &num);
int main()
{
int pound = 0; // 20 shilling
int shilling = 0; // 12 penny
int penny = 0; // 1 penny
wchar_t delimiter = L".";
std::wcout << L"-M-" << L"Введите сумму валюты \n";
while (!get_currency(L"фунтов:", L"неправильные фунты", pound)) ;
while (!get_currency(L"шиллингов:", L"неправильные Шиллинги", shilling)) ;
while (!get_currency(L"пенни:", L"неправильные пенни", penny)) ;
// --- 5 = 1/100 old pound. --- 2.4 = 1 modern penny
int modern_penny = shilling * 5 + round(penny / 2.4);
int modern_pound;
if (modern_penny >= 100) {
modern_pound = pound + modern_penny / 100;
modern_penny = modern_penny % 100;
} else {
modern_pound = pound;
}
std::wcout
<< L"Modern value: "
<< L"\u00A3"
<< modern_pound << delimiter << modern_penny << std::endl;
return 0;
}
bool get_currency(const wchar_t *prompt, const wchar_t *err_message, int &num) {
std::wcout.width(15);
std::wcout.setf(std::ios::left);
std::wcout << prompt;
if ((std::wcin >> num).good()) {
return true;
}
std::wcin.clear();
if (std::wcin.peek() == L'q') {
std::wcout << L"Выход. Bye." << std::endl;
exit(0);
}
std::wcin.ignore(50, '\n');
std::wcout << err_message << L" повтори ввод или 'q' для выхода: " << std::endl;
return false;
}
Под windows (компилятор mingw gcc version 4.x.x) работало как надо.