错误 'LC_TYPE' 未在此范围内声明
Error 'LC_TYPE' was not declared in this scope
我正在用 C++ 编写程序,应该将文本中的字母更改为大写字母(程序可以运行,但 setlocale 不运行)。但它给了我错误。 [错误] 'LC_TYPE' 未在此范围内声明。它 "should" 有效,因为它来自我的官方教员文献。
#include <iostream>
#include <string>
using namespace std;
int main() {
cout << "Write something: " << endl;
string tekst; //tekst=text
getline(cin, tekst);
setlocale(LC_TYPE, "croatian"); // here is problem...
for (char znak : tekst){ //znak=char, symbol...
char velikoSlovo = toupper(znak); // velikoSlovo=uppercaseLetter
cout << velikoSlovo;
}
cout << endl;
return 0;
}
有人知道如何解决这个问题吗??
我正在使用 Orwell Dev C++ 5.9.2。语言标准 (-std) 是 ISO C++ 11。
Here is picture.
难道你不需要包括 #include <clocale>
据说 here
编辑:
实际上 #include <locale.h>
应该优于 <clocale>
以减少可移植性问题。感谢@Cheers 在评论中提到它。
如文档所述,您应该使用 LC_CTYPE
:
http://www.cplusplus.com/reference/clocale/setlocale/
您还需要提供有效的语言环境代码,as described here
所以对于 chroatian,你的行应该是这样的:
setlocale(LC_CTYPE, 'hr_HR.UTF-8'); // or just "hr_HR"
或者您可以只使用:
setlocale(LC_ALL, "")
应该将本地化设置为您的计算机使用的默认语言环境。
并且如前所述,您可能还需要添加 #include <clocale>
添加
#include <locale.h>
获取 setlocale
及其相关常量的声明。
一般来说,只要阅读编译器似乎无法识别的任何函数或相关事物的 relevant documentation。
一般来说,所选方法可能适用于面向单字节的编码,但不适用于 UTF-8 等多字节编码。 Windows中常用单字节编码。在 Unix 领域,它是 UTF-8 规则。
而对于 Windows,您通常需要系统的默认语言环境,因此而不是
setlocale(LC_TYPE, "croatian");
您可能(但不一定,但很有可能)得到
更好的服务
setlocale(LC_ALL, "");
其中空字符串选择系统区域设置而不是默认的纯 ASCII "C" 区域设置。
此外,请注意 C 库中的 toupper
需要非负参数,否则需要特殊值 EOF
。当您知道它不是 EOF
.
时,您可以将参数转换为 unsigned char
我正在用 C++ 编写程序,应该将文本中的字母更改为大写字母(程序可以运行,但 setlocale 不运行)。但它给了我错误。 [错误] 'LC_TYPE' 未在此范围内声明。它 "should" 有效,因为它来自我的官方教员文献。
#include <iostream>
#include <string>
using namespace std;
int main() {
cout << "Write something: " << endl;
string tekst; //tekst=text
getline(cin, tekst);
setlocale(LC_TYPE, "croatian"); // here is problem...
for (char znak : tekst){ //znak=char, symbol...
char velikoSlovo = toupper(znak); // velikoSlovo=uppercaseLetter
cout << velikoSlovo;
}
cout << endl;
return 0;
}
有人知道如何解决这个问题吗?? 我正在使用 Orwell Dev C++ 5.9.2。语言标准 (-std) 是 ISO C++ 11。 Here is picture.
难道你不需要包括 #include <clocale>
据说 here
编辑:
实际上 #include <locale.h>
应该优于 <clocale>
以减少可移植性问题。感谢@Cheers 在评论中提到它。
如文档所述,您应该使用 LC_CTYPE
:
http://www.cplusplus.com/reference/clocale/setlocale/
您还需要提供有效的语言环境代码,as described here
所以对于 chroatian,你的行应该是这样的:
setlocale(LC_CTYPE, 'hr_HR.UTF-8'); // or just "hr_HR"
或者您可以只使用:
setlocale(LC_ALL, "")
应该将本地化设置为您的计算机使用的默认语言环境。
并且如前所述,您可能还需要添加 #include <clocale>
添加
#include <locale.h>
获取 setlocale
及其相关常量的声明。
一般来说,只要阅读编译器似乎无法识别的任何函数或相关事物的 relevant documentation。
一般来说,所选方法可能适用于面向单字节的编码,但不适用于 UTF-8 等多字节编码。 Windows中常用单字节编码。在 Unix 领域,它是 UTF-8 规则。
而对于 Windows,您通常需要系统的默认语言环境,因此而不是
setlocale(LC_TYPE, "croatian");
您可能(但不一定,但很有可能)得到
更好的服务setlocale(LC_ALL, "");
其中空字符串选择系统区域设置而不是默认的纯 ASCII "C" 区域设置。
此外,请注意 C 库中的 toupper
需要非负参数,否则需要特殊值 EOF
。当您知道它不是 EOF
.
unsigned char