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