【技术篇】C++的输入流--cin

时间:2024-04-08 12:45:20

(一)cin>>

    1.1 cin>>读取一个字符

  •     cin>>相当于cin.operator>>(),即调用成员operator>>() 进行读取数据
  •     当cin>>读取缓冲区数据第第一个数据为空格、tab、或者换行等字符分隔符时,会将之忽略并清除掉,接着读取下一个数据,如果缓冲区为空,则阻塞等待。等数据读取成功后,后面剩余的分隔符会留在缓冲区中,cin>>不会处理。
void test1()
{
    vector<char> ve;
    for (int i = 0; i < 10; i++)
    {
        char tmp; cin >> tmp;
        ve.push_back(tmp);
    }		
    copy(ve.begin(), ve.end(), ostream_iterator<char>(cout));
    cout << endl;
}

   【技术篇】C++的输入流--cin

    1.2 cin>>读取一个字符,使用noskipws控制,;

  •      使用noskipws,可以控制输入流不要略过空白字符
void test2()
{
    vector<char> ve;
    for (int i = 0; i < 10; i++)
    {
	char tmp; cin >> noskipws >> tmp;
	ve.push_back(tmp);
    }
    copy(ve.begin(), ve.end(), ostream_iterator<char>(cout));
    cout << endl;
}

【技术篇】C++的输入流--cin 

(二)cin.get()

    cin.get()函数有多种重载形式,大致分为四种,第一种无参数;第二种一个参数;第三种二个参数;第四种三个参数

   2.1 输入一个字符

  •     cin.get()函数从输入缓冲区读取单个字符时不忽略分隔符,直接将数据取出来打印;
  •     cin.get()的返回值为int型,成功返回读取字符的ASKLL码值,遇到文件结束符(window下为Ctrl+z,Linux下为Ctrl+d)时返回EOF,即-1。
void test3()
{
	char ch1, ch2, ch3;
	int i = 10;
	vector<char> ve;
	//ch1 = cin.get(); //无参使用
	//ch2 = cin.get();
	//ch3 = cin.get();
	cin.get(ch1).get(ch2).get(ch3); //一个参数的使用(支持连用)
	cout << ch1 << ch2 << ch3;
}

   【技术篇】C++的输入流--cin

2.2 输入一行字符

  •     cin.get(arr, 10),在读取一行时,遇到换行符结束读取,但是不对换行符进行处理,换行符会遗留在缓存中。下一次cin.get()的时候,就会将上一次剩余的数据读取出来。(注:getline读取一行字符时,遇到换行符中止,并将换行符从缓冲区删除掉)
  •     cin.get(str,size);在读取一行字符串时, 只能将字符串读取到char*类型的字符串中,但是C++的getline函数可以将字符串读取到string类型中,因为string是增长字符串,使用起来更加方便,多以较多的使用getline函数。
void test5()//cin.getline(),读取一行
{
	char arr[10] = {};
	//cin.getline(arr, 10); //两个参数的使用
	cin.getline(arr, 10, '0');//三个参数的使用,将字符0设置为结束符
	char ch = cin.get();
	cout << arr << "***" << ch;
}

两个参数:

【技术篇】C++的输入流--cin

三个参数:

【技术篇】C++的输入流--cin

(三)cin.getline()

   3.1 读取一行

  •    cin.getline()和cin.get()两个函数之间的区别是,cin.getline()函数不会把结束符或者换行符遗留在缓存区中;
  •    当再一次cin.getline()时,将跳过结束符接着读取剩余的数据
void test5()
{
	char arr[10] = {};
	cin.getline(arr, 10);//两个参数的使用
	//cin.getline(arr, 10, '0');//三个参数 的使用,将字符0设置为结束符
	char brr[10];
	cin.getline(brr, 5);
	cout << arr << "***" << brr;
}

两个参数:

【技术篇】C++的输入流--cin

三个参数:

【技术篇】C++的输入流--cin