在C ++中接受扩展ASCII代码作为输入

时间:2016-03-10 19:58:12

标签: c++ ascii iostream

我的程序不接受诸如“à”之类的符号,因为世界上某些城市名​​称都将这些符号作为字符。我正在使用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>

3 个答案:

答案 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";
}

http://www.cplusplus.com/reference/cwchar/

答案 1 :(得分:0)

C ++通常不会在源代码中编码扩展字符(通常是ASCII,UTF-7)。尝试

string funnyChar = "\x85";

它应该以你期望的方式开始工作。

答案 2 :(得分:0)

stdinstdout模式设置为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;
}