• 标准输入流
  • cin.get() 获取一个字符
  • cin.get(两个参数) 获取字符串
  • 利用cin.get获取字符串时候,换行符遗留在缓冲区中
  • cin.getline() 获取字符串
  • 利用cin.getline获取字符串时候,换行符不会被取走,也不在缓冲区中,而是直接扔掉
  • cin.ignore() 忽略 默认忽略1个字符, 如果填入参数X,代表忽略X个字符
  • cin.peek() 偷窥 ,查看,但不取走
  • cin.putback() 放回 放回原位置
  • 案例1
  • 判断用户输入的内容 是字符串还是数字
  • 案例2
  • 用户输入 0 ~ 10 之间的数字,如果输入有误,重新输入
  • 标志位 cin.fail() 0代表正常 1代表异常
  • cin.clear() cin.sync() 清空缓冲区 重置标志位
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

/*
cin.get() //一次只能读取一个字符
cin.get(一个参数) //读一个字符
cin.get(两个参数) //可以读字符串
cin.getline()
cin.ignore()
cin.peek()
cin.putback()
*/
void test01()
{
	//输入  a  s     第一次 a  第二次  s  第三次 换行  第四次 等待下次输入
	char c = cin.get();  // a

	cout << "c = " << c << endl;

	c = cin.get();  // s
	
	cout << "c = " << c << endl;

	c = cin.get();// 换行

	cout << "c = " << c << endl;


	c = cin.get(); // 缓冲区没有内容了,所以等待输入

	cout << "c = " << c << endl;
}


void test02()
{
	char buf[1024] = { 0 };
	cin.get(buf, 1024);

	char c = cin.get();
	//利用cin.get获取字符串时候,换行符遗留在缓冲区中
	if (  c== '\n')
	{
		cout << "换行符遗留在缓冲区" << endl;
	}
	else
	{
		cout << "换行符不在缓冲区" << endl;
	}
	cout << buf << endl;

}

void test03()
{
	char buf[1024] = { 0 };

	//利用cin.getline获取字符串时候,换行符不会被取走,也不在缓冲区中,而是直接扔掉
	cin.getline(buf, 1024);

	char c = cin.get();
	if (c == '\n')
	{
		cout << "换行符遗留在缓冲区" << endl;
	}
	else
	{
		cout << "换行符不在缓冲区" << endl;
	}
	cout << buf << endl;

}

//cin.ignore() 忽略 默认忽略1个字符, 如果填入参数X,代表忽略X个字符
void test04()
{
	cin.ignore(2);
	char c = cin.get();
	cout << "c = " << c << endl;
}

//cin.peek() 偷窥  输入as ,结果就是 a a s 
void test05()
{
	char c = cin.peek();   // a ,只查看,不取走
	cout << "c = " << c << endl;

	c = cin.get();		// a 
	cout << "c = " << c << endl;
	
	c = cin.get();		// s
	cout << "c = " << c << endl;

}

//cin.putback() 放回,放回原位置,取走了,再放回来
void test06()
{
	char c = cin.get();
	cin.putback(c);

	char buf[1024] = { 0 };

	cin.getline(buf, 1024);
	cout << buf << endl;
}


//案例1、 判断用户输入的内容 是字符串还是数字  12345     abcde
void test07()
{
	cout << "请输入一个字符串或者数字" << endl;
	char c = cin.peek();

	if (c >= '0' && c <= '9')
	{
		int num;
		cin >> num;
		cout << "您输入的是数字 为:" << num << endl;
	}
	else
	{
		char buf[1024] = { 0 };
		cin >> buf;
		cout << "您输入的是字符串 :" << buf << endl;
	}
}

//案例2、 用户输入 0 ~ 10 之间的数字,如果输入有误,重新输入
void test08()
{
	cout << "请输入 0 ~ 10 之间的数字" << endl;

	int num;

	while (true)
	{
		cin >> num;

		if (num >= 0 && num <= 10)
		{
			cout << "输入正确,输入值为:" << num << endl;
			break;
		}
		
		//清空缓冲区 重置标志位 
		cin.clear();
		cin.sync();
		//cin.ignore();//vs2013以上版本加入 
		//如果标志位为 0  代表缓冲区正常    如果标志位为1   缓冲区异常
		//cout << " cin.fail()  = " << cin.fail() << endl;
		
		cout << "输入有误,请重新输入: " << endl;
	}

}

int main(){
	//test01();
	//test02();
	//test03();
	//test04();
	//test05();
	//test06();
	//test07();
	test08();

	
	
	system("pause");
	return EXIT_SUCCESS;
}