- 标准输入流
- 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;
}