gpt4 book ai didi

c++ - 那是 C++ 编译器错误吗?

转载 作者:行者123 更新时间:2023-11-28 02:02:22 25 4
gpt4 key购买 nike

我在尝试执行以下代码时遇到了一些麻烦:

#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);

这里有更多信息:What most correct way to set the encoding in C++?

但是,正如上面帖子中有人提到的那样,您真的不应该那样修改语言环境。相反,您应该使用设置的任何语言环境。要使用此信息,您可以使用:

std::setlocale(LC_ALL, "");

关于c++ - 那是 C++ 编译器错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38941721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com