跳到主要内容

C++ wcin 流

wcin 和 cin 的区别

cin 使用 char(窄字符)作为字符类型。它可以用于 ASCII 和 ANSI 字符。

对于国际化,我们需要使用不适合存放在 char 中的 Unicode 字符串。wcin 使用 wchar_t(宽字符)并且可以用于 Unicode 字符。

wcin 声明

extern wistream wcin;

它定义在 <iostream> 头文件中。

wcin 对象在第一次构造类型为 ios_base::Init 的对象时或之前就已确保初始化。在 wcin 对象构造之后,wcin.tie() 返回 &wcout,这意味着任何对 wcin 进行的格式化输入操作都会在输出中有字符待处理时强制调用 wcout.flush()

wcin 中的 "wc" 指 "wide character"(宽字符),'in' 意味着 "input"(输入),因此 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"请输入一个单词:";
wcin >> word;

wcout << word;
return 0;
}

当你运行程序时,可能的输出将会是:

请输入一个单词:kathmandu
kathmandu

示例 2:带成员函数的 wcin:

#include <iostream>

using namespace std;

int main()
{
wchar_t str[50], ch;

wcout << L"请输入一个字符串:";
wcin.getline(str, 20);

wcout << L"请输入一个字符:";
wcin.get(ch);

wcout << L"字符串 = " << str << endl;
wcout << L"字符 = " << ch << endl;

return 0;
}

当你运行程序时,可能的输出将会是:

请输入一个字符串:program using wcin
请输入一个字符:h
字符串 = program using wcin
字符 = h

注意事项

建议使用 C++11 引入的 char16_tchar32_t 来代替 wchar_t,因为 wchar_t 在某些系统上是 16 位,在另一些系统上是 32 位。这使得移植变得困难。