C++ wcin

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,这意味着对wcin的任何格式化输入操作都会强制调用 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_tchar32_t 被推荐使用,而不是 wchar_t,因为 wchar_t 在某些系统上是 16 位,而在另一些系统上是 32 位。这使得移植变得困难。


另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战