我尝试使用以下代码传递不同的输入,但未能打印出消息:“糟糕,您没有输入 ASCII 字符,更不用说 y 或 n 了!”我输入了各种非 char 类型的 Unicode 字符(基本上只是输入 ALT+随机数,例如 ™、š、²、Ž、±。这些都没有产生错误。cin 是否默默地忽略或丢弃不是的输入ASCII 字符?
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();
}
操作系统:Windows 10 64 位,基于 x64 的处理器 编译器:Visual Studio Community 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*/ }
关于c++ - std::cin 是否无法将命令行中的用户输入传递给类型为 char 的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43306589/