可以std :: cin无法将命令行中的用户输入传递给类型为char的变量?
问题描述:
我试过用下面的代码传递不同的输入,但是没有得到打印的信息:“哎呀,你没有输入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。
更新:我想我的程序没有理由验证是否输入了字符。不过,我想也许我很好奇,知道我没有太在意这个计划是否真的有必要。
答
std::cin.fail();
将返回true,如果基础流未能读取或写入数据。它与您提供的编码无关。
还值得一提的是,char
并不是真正意识到utf-8或ASCII,它只是一个字节。 C++流不会验证数据的编码。
所以在这种情况下,Ž
(和其他)是std::cin
的有效输入。
如果您想验证ASCII字符只是,你需要自己做:
std::cin >> c;
if (c < 0 || c > 127) { /*handle non ASCII chars*/ }
在你的情况,你需要验证对y
或n
:
std::cin >> c;
if (c != 'y' && c != 'n') { /*handle invalid input*/ }
平原'char'永远不会超过127在普通系统上 –
@MM如果'char'实际上没有签名? –
如果它不是通过? OP说MSVC++ 2015. –