IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 41 C++输入输出流 -> 正文阅读

[C++知识库]41 C++输入输出流

1 标准输入流函数

标准输入流对象cin,重点掌握的函数

cin.get(一个参数) //读一个字符
cin.get(三个参数) //可以读字符串
cin.getline()
cin.ignore()
cin.peek()
cin.putback()

#include<iostream>
using namespace std;

//标准输入流对象cin,重点掌握的函数
//cin.get() //一次只能读取一个字符
//cin.get(一个参数) //读一个字符
//cin.get(三个参数) //可以读字符串
//cin.getline()
//cin.ignore()
//cin.peek()
//cin.putback()

void main() {
	char mybuf[1024];
	int myInt;
	long myLong;
	cin >> myInt;
	cin >> myLong;
	cin >> mybuf;	//遇见空格停止接收数据

	cout << "myInt: " << myInt << " myLong: " << myLong << " mybuf: " << mybuf << endl;
}

cin.get() //一次只能读取一个字符 输入EOF时(ctrl+z)结束, 回车从缓冲区输出字符

void main() {
	char ch;
	while ((ch = cin.get()) != EOF) {
		cout << ch << endl;
	}
}

结果

abcdef
a
b
c
d
e
f


^Z

缓冲区

void main() {
	char a, b, c;
	cout << "cin.get(a) 如果缓冲区没有数据,则程序阻塞\n";
	cin.get(a);
	cin.get(b);
	cin.get(c);

	cout << a << b << c << "因为缓冲区有数据,所以程序不会阻塞\n";
	cin.get(a).get(b).get(c);
	cout << a << b << c;
}

结果

cin.get(a) 如果缓冲区没有数据,则程序阻塞
abcdefg
abc因为缓冲区有数据,所以程序不会阻塞
def

getline

// getline可以接收空格
void main() {
	char buf1[256];
	char buf2[256];
	cout << "请输入一个字符串含有多个空格 aa cc dd\n";

	cin >> buf1;

	cin.getline(buf2, 256);
	cout << "buf1:" << buf1 << "\nbuf2:" << buf2 << endl;
}

结果

请输入一个字符串含有多个空格 aa cc dd
aacc bb aa ee
buf1:aacc
buf2: bb aa ee

ignore 忽略缓冲区数据

void main() {
	char buf1[256];
	char buf2[256];
	cout << "请输入一个字符串含有多个空格 aa  bbccdd\n";

	cin >> buf1;
	cin.ignore(2);

	cin.getline(buf2, 256);
	cout << "buf1:" << buf1 << "\nbuf2:" << buf2 << endl;
}

结果

请输入一个字符串含有多个空格 aa  bbccdd
aa  bbccdd
buf1:aa
buf2:bbccdd

peek 看缓冲区中的数据

void main() {
	char buf1[256];
	char buf2[256];
	cout << "请输入一个字符串含有多个空格 aa  bbccdd\n";

	cin >> buf1;
	cin.ignore(2);
	int myint = cin.peek();
	cout << "myint:" << myint << endl;

	cin.getline(buf2, 256);
	cout << "buf1:" << buf1 << "\nbuf2:" << buf2 << endl;
}

结果

请输入一个字符串含有多个空格 aa  bbccdd
aa bde
myint:100
buf1:aa
buf2:de

案例:输入的整数和字符串分开处理

//案例:输入的整数和字符串分开处理
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);
		getline(cin, str); // //字符串 中间可能有空格 使用 cin.getline();
		cout << "You entered a word: " << str << '\n';
	}	system("pause");
	return 0;
}

2 标准输出流函数

void main() {
	cout << "hello" << endl;
	cout.put('h').put('e').put('o').put('\n');

	const char* p = "hello idcast";
	cout.write(p, strlen(p)) << endl;
	cout.write(p, strlen(p) - 4) << endl;
	cout.write(p, strlen(p) + 4) << endl;

}

结果

hello
heo
hello idcast
hello id
hello idcast
#include<iostream>
#include<string>
#include <iomanip> 
using namespace std;
void main() {
	//使用类成员函数
	cout << "<start>";
	cout.width(30);
	cout.fill('*');
	cout.setf(ios::showbase); //#include <iomanip>
	cout.setf(ios::internal); //设置
	cout << hex << 123 << "<End>\n";

	cout << endl << endl;
	// 控制符
	cout << "<Start>"
		<< setw(30)
		<< setfill('*')
		<< setiosflags(ios::showbase) //基数
		<< setiosflags(ios::internal)
		<< hex
		<< 123
		<< "<End>\n"
		<< endl;

}

结果

<start>0x**************************7b<End>


<Start>0x**************************7b<End>

3 文件I/O

1 文件读写

#include<iostream>
using namespace std;
#include<fstream>

void main() {
	// 写文件
	const char* fname = "1.txt";
	ofstream fout(fname);	//建立输出流和文件进行关联
	fout << "hello...1" << endl;
	fout << "hello...2" << endl;
	fout << "hello...3" << endl;
	fout.close();

	// 读文件
	ifstream fin(fname);	//建立输入流和文件关联
	char ch;
	while (fin.get(ch)) {
		cout << ch;
	}
	fin.close();
}

得到1.txt文件

2 二进制文件读写

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include<fstream>
class Teacher {
private:
	int age;
	char name[32];
public:
	Teacher() {
		age = 33;
		strcpy(name, "");
	}
	Teacher(int _age, const char* _name) {
		age = _age;
		strcpy(name, _name);
	}
	void printT() {
		cout << "age: " << age << " name: " << name << endl;
	}
};

void main() {
	const char* fname = "2.dat";
	ofstream fout(fname, ios::binary);
	if (!fout) {
		cout << "打开文件失败" << endl;
		return;
	}
	Teacher t1(31, "t31"), t2(32, "t32");
	fout.write((char*)& t1, sizeof(t1));
	fout.write((char*)& t2, sizeof(t2));
	fout.close();

	//
	ifstream fin(fname);
	Teacher tmp;

	fin.read((char*)& tmp, sizeof(Teacher));
	tmp.printT();

	fin.read((char*)& tmp, sizeof(Teacher));
	tmp.printT(); 

	fin.close();
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:09:57  更:2021-09-02 11:11:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 21:24:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计