我的程序不接受诸如“à”之类的符号,因为世界上某些城市名称都将这些符号作为字符。我正在使用C ++。我已经尝试过所有类型的输入流,例如getline(cin,string),fgets等。收集输入中的所有这些形式都会在“...”处看到特殊符号。
这是在visual studio 2015中制作的Windows控制台应用程序
例如
string funnyChar = "à";
getline(cin, checkFunny);
if (checkFunny.compare(funnyChar) == 0)
//do things
用户输入àero
ALT + 0224ero
或用户输入àero为
ALT + 133ero
在代码中,输入流无法在我的if语句中看到为其输入的alt代码
if(checkFunny.compare(funnyChar)==0)
永远不会奏效。
或多或少,我需要能够接收这些(任何)特殊字符,以便我可以保存它们,然后再显示它们,但是,也不要接受非常具体的字符,例如†(alt + 0134)< / p>
答案 0 :(得分:0)
如果你试图在程序的参数列表中使用这些字符,那是不可能的。 main必须声明为main(void)&#39;,&#39; main(int argc,char ** argv)&#39;或语义等价物。我相信你需要像&#39; main(int argc,wchar_t ** argv)&#39;根据标准不允许这样做。
如果您在其他地方获取数据之后只是尝试处理数据,我会说尝试这些功能的宽字符版本。以fgetwc为例。可能是这样的事情。
#include <iostream>
#include <string>
int main() {
std::locale loc("");
std::locale::global (loc);
wcin.imbue(loc);
std::wstring city;
std::wcout << L"Enter your city: ";
std::wcin >> city;
std::wcout << L"What's it like in " << city << "?\n";
}
答案 1 :(得分:0)
C ++通常不会在源代码中编码扩展字符(通常是ASCII,UTF-7)。尝试
string funnyChar = "\x85";
它应该以你期望的方式开始工作。
答案 2 :(得分:0)
将stdin
和stdout
模式设置为U16
即可。请检查以下代码。
(请注意,只有在想再次输出相同的字符时才需要设置stdout
。)
#include <iostream>
#include <string>
#include <io.h>
#include <fcntl.h>
int main()
{
_setmode(_fileno(stdin), _O_U16TEXT);
_setmode(_fileno(stdout), _O_U16TEXT);
std::wstring funnyChar(L"à");
std::wstring checkFunny;
std::wcin >> checkFunny;
if (checkFunny.compare(funnyChar) == 0)
std::wcout << L"Yay" << std::endl;
std::wcout << checkFunny << std::endl;
return 0;
}