2017-04-09 31 views
5

我试过用下面的代码传递不同的输入,但是没有得到打印的信息:“哎呀,你没有输入ASCII字符,更不用说是y或n了!”我输入了不是字符类型的各种Unicode字符(基本上是在ALT +随机数字中打个招呼,例如™,š,²,Ž,±。这些都没有产生错误.Cin是否默默地忽略或放弃了不是ASCII字符可以std :: cin无法将命令行中的用户输入传递给类型为char的变量?

std::cout << "Would you like to play again? Enter y or n: "; 
std::cin >> yOrN; 
isChar = std::cin.fail(); 
//check if the user did not enter an ASCII char, e.g. test with a Unicode character 
if (isChar) 
{ 
    std::cout << "Oops, you did not enter an ASCII char, let alone one that is y or n!\n"; 
    std::cin.clear(); 
} 

OS:视窗10 64位,基于x64的处理器 编译:Visual Studio的社区2015年

我是不是能够通过搜索“提取非ASCII字符来解决这个问题cin C++“,看前三页

我很新的Stack Overflow,所以如果我违反了这个问题的任何规则或行为准则,请原谅我。我在learncpp.com上学习C++,并正在编写自己的代码来回答这个page的问题2。

更新:我想我的程序没有理由验证是否输入了字符。不过,我想也许我很好奇,知道我没有太在意这个计划是否真的有必要。

回答

1

std::cin.fail();将返回true,如果基础流未能读取或写入数据。它与您提供的编码无关。

还值得一提的是,char并不是真正意识到utf-8或ASCII,它只是一个字节。 C++流不会验证数据的编码。

所以在这种情况下,Ž(和其他)是std::cin的有效输入。

如果您想验证ASCII字符只是,你需要自己做:

std::cin >> c; 
if (c < 0 || c > 127) { /*handle non ASCII chars*/ } 

在你的情况,你需要验证对yn

std::cin >> c; 
if (c != 'y' && c != 'n') { /*handle invalid input*/ } 
+0

平原'char'永远不会超过127在普通系统上 –

+0

@MM如果'char'实际上没有签名? –

+0

如果它不是通过? OP说MSVC++ 2015. –

相关问题