加载中...

输入输出流

1.系统标准的输入流(重点)

1.流的概念和流类库的结构(了解)

标准IO:对系统的标准输入输出设备进行读写

文件IO:对磁盘进行输入输出读写

串IO:对内存进行读写 申请数组

2.成员函数

cin.get() //一次只能从缓冲区读取一个字符 可以接受空格 换行

//首先cin的输入有一个特点,在遇到‘ ’(空格)时,会结束输入,而cin.get()则将‘ ’也作为了一个字符放到输入里。那其次就是cin.get()的用法了。其用法如下:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

int main() {
	//输入的是as换行
	char c = cin.get(); //a
	cout << c << endl;

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

	c = cin.get(); //换行
	cout << c << endl;

	c = cin.get(); //阻塞
	cout << c << endl;
}

cin.get(一个参数) //读一个字符

int main() {
	char c1;
	cin.get(c1);  //获取字符
}

cin.get(两个参数) //可以读字符串

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

int main() {
	char c1, c2, c3, c4;
	cin.get(c1).get(c2).get(c3).get(c4);  //获取字符
	cout << c1 << c2 << c3 << c4;
}

int main() {
	char a[20];       //注意,可以接收空格且换行不拿走 留在缓冲区 此例子c接受了换行符
	cin.get(a, 20);  //第二个参数是接受字符的个数 
	char c = cin.get();
	if (c == '\n') {
		cout << "enter is no jie" << endl;
	}
	cout << a << endl;
}

cin.getline() //取一行,换行符丢弃

#include<iostream>
using namespace std;

int main() {
	char a[20];
	cin.getline(a, 20); //读取一行数据 换行丢弃
	cout << a << endl;
}

cin.ignore() //忽略

using namespace std;

int main() {
	cin.ignore(); //忽略一个字符
	char c = cin.get();
	cout << c << endl;
    cin.ignore(3); //忽略三个字符
	c = cin.get();
	cout << c << endl;
}

cin.peek() //偷窥

#include<iostream>
using namespace std;

int main() {
	//输入ab 输出aa
	char c = cin.peek(); //只看第一个字符  字符不拿走 依旧在缓冲区
	cout << c << endl;
	c = cin.peek();
	cout << c << endl;
}

cin.putback() //放回

using namespace std;

int main() {
	//输入hello  输出// h  hello
	char c = cin.get();
	cout << c << endl;
	cin.putback(c); //将读取的字符放回缓冲区

	char buf[1024] = { 0 };
	cin.getline(buf,1024);
	cout << buf << endl;
}

3.案例

//判断用户输入的是字符串还是数字
void test06()
{
	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;
	}
}

//0 :goodbit 无错误 
//1 :Eofbit 已到达文件尾 
//2:failbit 非致命的输入/输出错误,可挽回 
//3:badbit 致命的输入/输出错误,无法挽回 

//输入一个0到10的数字,直到输入正确为止
void test07()
{
	int num;

	while (1)
	{
		cin >> num;
		if (num >= 0 && num <= 10)
		{
			cout << "输入正确" << endl;
			break;
		}
		cout << "重新输入:" << endl;
		//清楚错误的状态的flag  比如输入d  缺把d赋值给int这种整形  d仍然会留在缓冲区  
		cin.clear(); 
        
		//2013清空缓冲区   
		cin.sync();
        
        
		//2015 清空缓冲区
		char buf[1024] = { 0 };
		cin.getline(buf, 1024);

		//打印标志位 当输入流读取失败时,它会把字符放回原处,等待下次读取;并且将 条件状态标识符 中failbit 置位 正确返回1 错误返回0
		cout << cin.fail() << endl;
	}
}

2.系统标准的输出流(重点)

1.通过成员函数格式化输出

void test01()
{
	cout.put('c');
    //链式编程
    cout.put('a').put('b').put('c');
}

void test02()
{
	char buf[] = "hello world";
    cout.write(buf,strlen(buf));
}

//通过流的成员函数实现格式化的输出
void test03()
{
	int num = 99;
	cout.width(20);//设置宽度
	cout.fill('*');//填充
	cout.setf(ios::left);//让数据在左边
    
    //变成十六进制
	cout.unsetf(ios::dec);//卸载十进制
	cout.setf(ios::hex);//安装十六进制
    
	cout.setf(ios::showbase);//显示基数 美化十六进制
    
    //变成八进制
	cout.unsetf(ios::hex);//卸载十六进制
	cout.setf(ios::oct);//安装八进制
    
	cout << num << endl;
}

2.通过控制符格式化输出

//通过控制符来格式化输出,引入头文件iomanip
void test04()
{
	int num = 99;
	cout << setw(20);//设置宽度
	cout << setfill('*');//填充
	cout << setiosflags(ios::showbase);//显示基数
	cout << setiosflags(ios::left);//让数据在左边
    
    //不用卸载了
	cout << hex;//六十进制
	cout << oct;//八进制
	cout << dec;//十进制
	cout << num << endl;
}

3.打印浮点数后面的小数点

void test05()
{
	double d = 20.22;
    //设置显示浮点数 20.220000
	cout << setiosflags(ios::fixed);
    
    //显示小数点后10位
	cout << setprecision(10);
	cout << d << endl;
}
posted @ 2024-02-19 15:04  江寒雨  阅读(14)  评论(0)    收藏  举报