wcin 和 cin 的区别
cin
使用 char
(窄字符)作为字符类型。它可以用于 ASCII 和 ANSI 字符。
为了国际化,我们需要 Unicode 字符串,这些字符串无法放入 char
中。wcin
使用 wchar_t
(宽字符),可用于 Unicode 字符。
wcin 声明
extern wistream wcin;
它定义在 <iostream> 头文件中。
wcin
对象在类型 ios_base::Init
的对象第一次构造期间或之前确保被初始化。在 wcin
对象构造后,wcin.tie()
返回 &wcout
,这意味着对wcout.flush()
(如果存在待输出的字符)。
wcin
中的“wc”是指“宽字符”,“in”表示“输入”,因此 wcin
表示“宽字符输入”。wcin
对象与提取运算符(>>)一起使用,以接收字符流。通用语法为
wcin >> varName;
提取运算符可以多次使用以接受多个输入,例如
wcin >> var1 >> var2 >> … >> varN;
wcin
对象还可以与其他成员函数一起使用,例如 getline()、read()
等。一些常用的成员函数是
wcin.get(wchar_t &ch):
读取一个宽字符并将其存储在 ch 中。wcin.getline(wchar_t *buffer, int length):
将一系列宽字符读入字符串缓冲区,它会在- 读取了 length-1 个字符或
- 遇到行尾字符 ('\n') 或文件结束符时停止。
wcin.read(wchar_t *buffer, int n):
从流中读取 n 个字节(或直到文件结束)到缓冲区。wcin.ignore(int n):
忽略输入流中的下一个 n 个字符。wcin.eof():
如果到达文件结束符 (eof),则返回一个非零值。
示例 1:使用提取运算符的 wcin
#include <iostream>
using namespace std;
int main()
{
wchar_t word[20];
wcout << L"Enter a word: ";
wcin >> word;
wcout << word;
return 0;
}
运行程序时,可能的输出是
Enter a word: kathmandu kathmandu
示例 2:使用成员函数的 wcin
#include <iostream>
using namespace std;
int main()
{
wchar_t str[50], ch;
wcout << L"Enter a string: ";
wcin.getline(str, 20);
wcout << L"Enter a character: ";
wcin.get(ch);
wcout << L"String = " << str << endl;
wcout << L"Character = " << ch << endl;
return 0;
}
运行程序时,可能的输出是
Enter a string: program using wcin Enter a character: h String = program using wcin Character = h
请注意
C++11 中引入的 char16_t
和 char32_t
被推荐使用,而不是 wchar_t
,因为 wchar_t
在某些系统上是 16 位,而在另一些系统上是 32 位。这使得移植变得困难。
另请阅读