重要的事情说三遍:以后大家看见但凡有输入和输出,大脑第一时间要想到:不是在键盘中输入 也不是在屏幕上显示 1 而是在缓冲区中读取和写入 2 而是在缓冲区中读取和写入 3 而是在缓冲区中读取和写入
接下来直接看代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
void test()
{
char ch = 0;
while ((ch = cin.get()) != EOF)//输入数据都在缓冲区 cin.get()读取一个字符
{
cout << ch << endl;
}
}
void test3()
{
char ch;
cin.get(ch);//输入为abcd
cout << ch << endl;//a
cin.ignore(3,'\n');//忽略当前字符 可加参数 忽略多少个字符 把\n之前的忽略掉 从缓冲区取走
cin.get(ch);//把此时缓冲区的b给忽略掉了
cout << ch << endl;// d
}
int main()
{
/*char ch2;
cin.get(ch2);*/
//char buf[220];
//memset(buf, 0, sizeof(buf));
///*cin.get(buf, 220);*///第一个参数数组名 第二个参数长度 从缓冲区读取字符串
///*for (int i = 0; i < strlen(buf) + 1; i++)
//{
// cout << buf[i] << " ";
//}*/
///*cout << buf << endl;*/
//cin.getline(buf, 220);//读取一行数据 不会读取最好一行\n
//cout << buf ;
/*test3();*/
# if 0
char ch = 0;
ch = cin.peek();//只看缓冲区的第一个字符但它不取走 返回第一个字符 如果缓冲区没有那么他会阻塞
if (ch >= '0' && ch <= '9')
{
int number; //
cin >> number;
cout << "你输入的是数字" << number << endl;
}
//实际上输入的是number 或者 buf
else
{
char buf[22];
memset(buf, 0, sizeof(buf));
cin >> buf;
cout << buf << endl;
}
#endif
char ch;
cin.get(ch);
if (ch >= '0' && ch <= '9')
{
//将字符放回缓冲区 cin.putback
cin.putback(ch);
//此时缓冲区 为 ch
int number;
cin >> number; //从缓冲区输入
cout << number << endl;//输出的为刚刚放回缓冲区的值
}
//不是字符也放回缓冲区
cin.putback(ch);
char buf[22];
cin >> buf;
cout << buf<< endl;
return 0;
}