Lev*_*evy 4 c++ getline non-ascii-characters
我正在尝试使用getline()命令从用户那里获取重音字符,但它没有正确打印它们。
我尝试将一些库包含为locale,但徒劳无功。
这是我的代码:
#include <iostream>
#include <cstdlib>
#include <string>
#include <locale>
using namespace std;
class Pers {
public:
string name;
int age;
string weapon;
};
int main()
{
setlocale(LC_ALL, "");
Pers pers;
cout << "Say the name of your character: ";
getline(cin, pers.name);
cout << pers.name;
}
Run Code Online (Sandbox Code Playgroud)
当我输入:Mark Coração 时,我得到的是:
我如何解决它?
实际上,问题并非来自getline().
std::cout(分别std::cin)不支持特殊字符。为此,您必须std::wcout(分别std::wcin)使用宽字符(标准字符的大小限制了您可以在 ascii 表中找到的内容)。
您也需要使用更大的字符来存储特殊字符,这就是宽字符的情况。std::string处理标准字符,std::wstring处理宽字符。
一种方法可以是:
std::wstring a(L"Coração");
std::wcout << a << std::endl;
Run Code Online (Sandbox Code Playgroud)
输出:
科拉桑
为了使它与getline():
std::wstring a;
getline(std::wcin, a)
std::wcout << a << std::endl;
Run Code Online (Sandbox Code Playgroud)
我希望它能有所帮助。