[英]Is that C++ compiler error?
我在尝试执行以下代码时遇到了一些麻烦:
#include <iostream>
#include <regex>
int main(int argc, char** argv) {
std::wstring buffer; // Buffer string for input
std::wregex integerRegex(L"^-?[0-9]+$"); // Regex for integers (123, -123, etc.)
while (true) {
std::wcout << L"Enter your value:\n";
std::wcin >> buffer; // Input string from keyboard to determinate is it integer or not
// Check if integer or not
if (regex_match(buffer, integerRegex)) {
std::wcout << L"Integer!\n";
} else {
std::wcout << L"Unknown :(\n";
}
}
return 0;
}
此代码应输出Integer!
如果输入的序列是整数或Unknown :(
如果不是。但是在某些情况下,我得到的是假阳性结果:当我输入-234а
,其中а
是西里尔字符-上面的代码说是整数,但不是。西里尔字母不会造成这种麻烦。
编译器为TDM-GCC 5.1.0,编译时带有以下标志:
-std=c++11 -w -Wall -Wextra -pedantic -Werror -pg -pipe
有人可以解释问题的根源是谁吗?
似乎wcin
试图将输入读取为ASCII。 非ASCII字符使它进入异常状态。 添加类似以下内容的内容可以解决该问题:
std::setlocale(LC_ALL, "C.UTF-8");
或在Windows上:
SetConsoleCP(CP_UTF8);
这里是一些更多信息: 在C ++中设置编码的最正确方法是什么?
但是,正如以上博文中提到的那样,您实际上不应该那样修改语言环境。 相反,您应该使用任何设置的语言环境。 要使用此信息,可以使用:
std::setlocale(LC_ALL, "");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.