c++ - std::cin 是否无法将命令行中的用户输入传递给类型为 char 的变量?

标签 c++ unicode cin non-ascii-characters text-extraction

我尝试使用以下代码传递不同的输入,但未能打印出消息:“糟糕,您没有输入 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*/  }

在您的情况下,您需要针对 yn 进行验证:

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

关于c++ - std::cin 是否无法将命令行中的用户输入传递给类型为 char 的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43306589/

相关文章:

.net - 监控任何应用程序中的选择

c++ - QT 程序包含带有 if-test-then block 的 bash 脚本以及内部问题错误中转义的必要引号

c++ - (隐式声明)不能被引用——它是一个被删除的函数

c++ - Qt 网页程序集 : configure kit

c - 如何在 C 中绘制 Unicode 刻度线?

MYSQL - 在 TEXT 列中存储 unicode 字符(表情符号)

c# - ISO6937 转 UTF8 在 C# 中给出错误结果

c++ - 使用输入调用成员函数

C++ CIN cin 随机跳过

c++ - 使用 cin.eof()