簡體   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