繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM