#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