尝试打印 unicode 字符 C++ 断言失败
Trying to print unicode characters C++ assert failed
我一直在尝试打印 Unicode 字符。我是 C++ 的新手。我在 Windows 10 并使用 Visual Studio 2019.
我正在尝试在控制台应用程序中打印以下艺术作品:
██╗███╗░░██╗░██████╗░█████╗░███╗░░██╗██╗████████╗██╗░░░██╗
██║████╗░██║██╔════╝██╔══██╗████╗░██║██║╚══██╔══╝╚██╗░██╔╝
██║██╔██╗██║╚█████╗░███████║██╔██╗██║██║░░░██║░░░░╚████╔╝░
██║██║╚████║░╚═══██╗██╔══██║██║╚████║██║░░░██║░░░░░╚██╔╝░░
██║██║░╚███║██████╔╝██║░░██║██║░╚███║██║░░░██║░░░░░░██║░░░
╚═╝╚═╝░░╚══╝╚═════╝░╚═╝░░╚═╝╚═╝░░╚══╝╚═╝░░░╚═╝░░░░░░╚═╝░░░
我使用 _setmode(_fileno(stdout), _O_U16TEXT);
让我打印它,但是当尝试打印一些文本时,我得到一个断言失败。
我的代码是这样的:
#include <fcntl.h>
#include <io.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include <Windows.h>
void banner() {
_setmode(_fileno(stdout), _O_U16TEXT);
wprintf(L" ██╗███╗░░██╗░██████╗░█████╗░███╗░░██╗██╗████████╗██╗░░░██╗\n");
wprintf(L" ██║████╗░██║██╔════╝██╔══██╗████╗░██║██║╚══██╔══╝╚██╗░██╔╝\n");
wprintf(L" ██║██╔██╗██║╚█████╗░███████║██╔██╗██║██║░░░██║░░░░╚████╔╝░\n");
wprintf(L" ██║██║╚████║░╚═══██╗██╔══██║██║╚████║██║░░░██║░░░░░╚██╔╝░░\n");
wprintf(L" ██║██║░╚███║██████╔╝██║░░██║██║░╚███║██║░░░██║░░░░░░██║░░░\n");
wprintf(L" ╚═╝╚═╝░░╚══╝╚═════╝░╚═╝░░╚═╝╚═╝░░╚══╝╚═╝░░░╚═╝░░░░░░╚═╝░░░\n");
}
void login(std::string username, std::string password) {
}
void menu() {
printf("Thank you For choosing Insanity");
}
int main()
{
bool loggedin = false;
if (loggedin) {
banner();
menu();
}
else {
banner();
printf("Please Login...\n");
printf("Username :");
}
return 0;
}
我在这里错过了什么?
我认为将模式和 cout
与 wcout
混合使用不是个好主意。
您可以尝试仅坚持使用 std::wcout
并在程序启动时直接设置模式 - 在您进行任何输出之前。
这可能有效:
#include <fcntl.h>
#include <io.h>
#include <Windows.h>
#include <clocale>
#include <iostream>
#include <string>
const std::wstring greeting =
LR"aw(
██╗███╗░░██╗░██████╗░█████╗░███╗░░██╗██╗████████╗██╗░░░██╗
██║████╗░██║██╔════╝██╔══██╗████╗░██║██║╚══██╔══╝╚██╗░██╔╝
██║██╔██╗██║╚█████╗░███████║██╔██╗██║██║░░░██║░░░░╚████╔╝░
██║██║╚████║░╚═══██╗██╔══██║██║╚████║██║░░░██║░░░░░╚██╔╝░░
██║██║░╚███║██████╔╝██║░░██║██║░╚███║██║░░░██║░░░░░░██║░░░
╚═╝╚═╝░░╚══╝╚═════╝░╚═╝░░╚═╝╚═╝░░╚══╝╚═╝░░░╚═╝░░░░░░╚═╝░░░
)aw";
void banner() {
std::wcout << greeting;
}
void menu() {
std::wcout << L"Thank you For choosing Insanity";
}
int main() {
const char CP_UTF_16LE[] = ".1200";
setlocale(LC_ALL, CP_UTF_16LE);
_setmode(_fileno(stdout), _O_U16TEXT);
bool loggedin = false;
if (loggedin) {
banner();
menu();
} else {
banner();
std::wcout << L"Please Login...\nUsername :";
}
}
我一直在尝试打印 Unicode 字符。我是 C++ 的新手。我在 Windows 10 并使用 Visual Studio 2019.
我正在尝试在控制台应用程序中打印以下艺术作品:
██╗███╗░░██╗░██████╗░█████╗░███╗░░██╗██╗████████╗██╗░░░██╗
██║████╗░██║██╔════╝██╔══██╗████╗░██║██║╚══██╔══╝╚██╗░██╔╝
██║██╔██╗██║╚█████╗░███████║██╔██╗██║██║░░░██║░░░░╚████╔╝░
██║██║╚████║░╚═══██╗██╔══██║██║╚████║██║░░░██║░░░░░╚██╔╝░░
██║██║░╚███║██████╔╝██║░░██║██║░╚███║██║░░░██║░░░░░░██║░░░
╚═╝╚═╝░░╚══╝╚═════╝░╚═╝░░╚═╝╚═╝░░╚══╝╚═╝░░░╚═╝░░░░░░╚═╝░░░
我使用 _setmode(_fileno(stdout), _O_U16TEXT);
让我打印它,但是当尝试打印一些文本时,我得到一个断言失败。
我的代码是这样的:
#include <fcntl.h>
#include <io.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include <Windows.h>
void banner() {
_setmode(_fileno(stdout), _O_U16TEXT);
wprintf(L" ██╗███╗░░██╗░██████╗░█████╗░███╗░░██╗██╗████████╗██╗░░░██╗\n");
wprintf(L" ██║████╗░██║██╔════╝██╔══██╗████╗░██║██║╚══██╔══╝╚██╗░██╔╝\n");
wprintf(L" ██║██╔██╗██║╚█████╗░███████║██╔██╗██║██║░░░██║░░░░╚████╔╝░\n");
wprintf(L" ██║██║╚████║░╚═══██╗██╔══██║██║╚████║██║░░░██║░░░░░╚██╔╝░░\n");
wprintf(L" ██║██║░╚███║██████╔╝██║░░██║██║░╚███║██║░░░██║░░░░░░██║░░░\n");
wprintf(L" ╚═╝╚═╝░░╚══╝╚═════╝░╚═╝░░╚═╝╚═╝░░╚══╝╚═╝░░░╚═╝░░░░░░╚═╝░░░\n");
}
void login(std::string username, std::string password) {
}
void menu() {
printf("Thank you For choosing Insanity");
}
int main()
{
bool loggedin = false;
if (loggedin) {
banner();
menu();
}
else {
banner();
printf("Please Login...\n");
printf("Username :");
}
return 0;
}
我在这里错过了什么?
我认为将模式和 cout
与 wcout
混合使用不是个好主意。
您可以尝试仅坚持使用 std::wcout
并在程序启动时直接设置模式 - 在您进行任何输出之前。
这可能有效:
#include <fcntl.h>
#include <io.h>
#include <Windows.h>
#include <clocale>
#include <iostream>
#include <string>
const std::wstring greeting =
LR"aw(
██╗███╗░░██╗░██████╗░█████╗░███╗░░██╗██╗████████╗██╗░░░██╗
██║████╗░██║██╔════╝██╔══██╗████╗░██║██║╚══██╔══╝╚██╗░██╔╝
██║██╔██╗██║╚█████╗░███████║██╔██╗██║██║░░░██║░░░░╚████╔╝░
██║██║╚████║░╚═══██╗██╔══██║██║╚████║██║░░░██║░░░░░╚██╔╝░░
██║██║░╚███║██████╔╝██║░░██║██║░╚███║██║░░░██║░░░░░░██║░░░
╚═╝╚═╝░░╚══╝╚═════╝░╚═╝░░╚═╝╚═╝░░╚══╝╚═╝░░░╚═╝░░░░░░╚═╝░░░
)aw";
void banner() {
std::wcout << greeting;
}
void menu() {
std::wcout << L"Thank you For choosing Insanity";
}
int main() {
const char CP_UTF_16LE[] = ".1200";
setlocale(LC_ALL, CP_UTF_16LE);
_setmode(_fileno(stdout), _O_U16TEXT);
bool loggedin = false;
if (loggedin) {
banner();
menu();
} else {
banner();
std::wcout << L"Please Login...\nUsername :";
}
}