C++ 输入流的 四个函数 get() getline() peek() putback() 20180317 day8

#include<iostream>
#include<string>


using namespace std;


/*
标准输入流对象cin
cin.get() //一次只能读取一个字符
cin.get(一个参数) //读一个字符
cin.get(三个参数) //可以读字符串
cin.getline()
cin.ignore()
cin.peek()
cin.putback()
*/




//演示 cin.putback()




//案例:输入的整数和字符串分开处理


int main()
{
	cout << "Please, enter a number or a word: ";
	char c = std::cin.get();   //先读取第一个字符


	if ((c >= '0') && (c <= '9')) //输入的整数和字符串 分开处理
	{
		int n; //整数不可能 中间有空格 使用cin >>n
		cin.putback(c); //“吐回”
		cin >> n;  //重新放入缓冲区
		cout << "You entered a number: " << n << '\n';
	}
	else
	{
		string str;
		cin.putback(c);
		//cin.getline(str);
		getline(cin, str); // //字符串 中间可能有空格 使用 cin.getline();
		cout << "You entered a word: " << str << '\n';
	}


	system("pause");
	return 0;
}






//演示  cin.ignore()  例如cin.ignore(2)代表忽略接下来的两个字符	


void main4()
{
	char buf1[50];
	char buf2[50];
	cout << "输入例如aa    bbccdd" << endl;


	cin >> buf1;
	cin.ignore(4);  //4代表忽视的空格数目
	cin.getline(buf2, 50);
	
	cout << "buf1=" << buf1 << "buf2=" << buf2 << endl;  //运行后发现buf2的前面不含有空格






	system("pause");
}




//演示  cin.peek()  读取缓冲区  有数据就返回缓冲区的第一个数据 字符就返回第一个字符或者ASCII  没有数据就不返回


void main5()
{
	char buf1[50];
	char buf2[50];
	cout << "输入例如aa    bbccdd" << endl;


	cin >> buf1;
	cin.ignore(4);  //4代表忽视的空格数目


	int myint;


	myint=cin.peek();  //代表试探缓冲区之后没有数据,


	cout << "myint=" << myint  << endl;  //输出myint  因为是int 应该会返回一个ascll值


	cin.getline(buf2, 50);


	cout << "buf1=" << buf1 << "\n buf2=" << buf2 << endl;  //运行后发现buf2的前面不含有空格






	system("pause");
}




//演示cin.getline(a,b) 可以接受空格  第一个a指明对应的指针,第二个参数指的是数组大小


void main3()
{
	char buf1[50];
	char buf2[50];


	cin >> buf1;
	cin.getline(buf2, 50);  //可以正常接收空格


	cout << "buf1=" << buf1 << "buf2=" << buf2 << endl;






	system("pause");
}








//演示  cin.get()  带一个参数
void main2()
{
	char a;
	char b;
	char c;
	cout << "缓冲区没有数据,程序阻塞" << endl;
	cin.get(a);
	cin.get(b);
	cin.get(c);


	cout << a << b << c << endl;


	cin.get(a).get(b).get(c);   //链式编程


	cout << a << b << c << endl;


	system("pause");
}






//cin.get() 获取单字符
void main01()
{
	char myBuf[1024];
	int a;
	int b;
	char ch;
	cin >> a;
	cin >> b;
	cin >> myBuf;  //遇见空格 停止接受数据
	cout << "a=" << a << "b=" << b << "mybuf=" << myBuf << endl;


	while ((ch=cin.get())!=EOF)   //如果单字符不等于EOF ctrl+z 就会一直将字符压入输入缓冲区
	{
		cout<<ch<<endl;
	}
	system("pause");

}

//不同的函数均有不同的main函数入口进行演示 测试的时候记得改main


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值