这是我的简化代码。我想扫描用户输入的字符并在下面的行中打印它们。很显然,非英语字符会出现一些问题。在程序中我应该使用德语字母,如ä,ö,ü和ß,以及其他一些字母(á,ë,é,í,ő,ű)。
我试图以多种方式解决问题。我试图插入行
setlocale(LC_ALL, "German");
以便至少扫描和打印德语字符。它根本不起作用:似乎getline由于某种原因没有输入输入的字符。
然后我用
替换了getlinestd::wcin >> myString;
但这也没什么用。输入äëßö后,我得到了这个:“÷á<。
有趣的是,如果没有setlocale,getline似乎运行良好并且精确地回馈我输入的字符。但是,std :: wcout不能很好地显示以下内容:“解决方案(使用äëáéíöüűűß):”。然后,一旦我在setlocale行中写道,getline就会变得疯狂,但是“解决方案(使用äëáéíöüűűß):”现在可以正确打印。
我应该如何修改代码以满足这些期望? 如果可能具有重要性,我会使用Windows平台。
提前致谢!
#include "stdafx.h"
#include <iostream>
#include <string>
int _tmain(int argc, _TCHAR* argv[])
{
using namespace std;
int iii = 1;
do
{
std::wcout << "Type in a string (with äëáéíöüőűß) : " << endl;
wstring myString;
getline(std::wcin, myString);
std::wcout << "Solution (with äëáéíöüőűß): " << myString << endl;
} while (iii < 50);
cin.get();
return 0;
}
答案 0 :(得分:0)
在进行任何输入或输出之前,必须设置模式:
#include <iostream>
#include <string>
#include <io.h>
#include <fcntl.h>
int main()
{
::std::locale d_Locale2( "German" );
::std::locale::global( d_Locale2 );
_setmode( _fileno( stdin ), _O_U16TEXT );
_setmode( _fileno( stderr ), _O_U16TEXT );
_setmode( _fileno( stderr ), _O_U16TEXT );
::std::wcout << L"Type in a string (with äëáéíöüőűß) : " << ::std::endl;
::std::wstring myString;
::std::getline( ::std::wcin, myString );
::std::wcout << L"Solution (with äëáéíöüőűß): " << myString << ::std::endl;
return 0;
}