平淡的一天。昨天通宵了下,说好的生物钟又乱了,无奈~起床自己做了道菜,胡萝卜、土豆、青椒切成丝一起炒,长辣椒放多了原因,感觉辣味十足,下次一定只能放一个这种辣椒,太给力了!昨晚回归了下wow,我不知道有没有开100级,不过想了下自己最拿手的还是防战,由于当下的wow是一个变革期,所以还是切回最熟的天赋,以不变应万变来的比较踏实,还行,每个几分钟手感就回来了,分分钟上了89,再刷一次本就90的经验,今天总结完这一章上下线。今天女朋友看中的那款高跟鞋,自己也很是很欣赏的。可能性格比较传统吧,还是接受不了当下比较奇形怪状的女性装扮,所以怂恿了女朋友去买。价钱还不是自己所能承受的,只能默默的撸代码~%>_<%
今天来总结第13章。这一章在c++中我感觉,似乎比java中来的要简洁一些!java中的在文件io的方面,相当多的内容啊!搞到弄一个标准输入输出也要各种绕啊绕啊。不过java当然有他的优势。c++设计成这样也必然有他的弊端,这是肯定的,只不过方便了初学者罢了,可这又有什么用?无论哪个初学者不要走到深入呢?
Chapter13
->输入输出流
1、输入输出流的有关类库(如表)。其实c++中整体常用输入输出总共分为三大块:标准输入输出、文件输入输出、字符串输入输出。
类名 |
作用 | 在哪个头文件中声明 |
ios | 抽象基类 | iostream |
istream |
通用输入流和其他输入流的基类 |
iostream |
ostream |
通用输出流和其他输出流的基类 |
iostream |
iostream |
通用输入输出流和其他输入输出流的基类 |
iostream |
ifstream |
输入文件类 |
fstream |
ofstream |
输出文件类 |
fstream |
fstream |
输入输出文件类 |
fstream |
istrstream |
输入字符串流类 |
strstream |
ostrstream |
输出字符串流类 |
strstream |
strstream |
输入输出字符串流类 |
strstream |
2、标准输出:cout、cerr(不经过缓冲直接向显示器上输出)、clog(先存放在缓冲区中,缓冲区满后或遇endl时向显示器输出);标准输入:cin。
3、cin.get()与cin.getline()的实践与区别:
#include<iostream>
using namespace std;
int main(){
char ch, ch_arr[20];
cin.get(ch_arr,12,'\\');//这种读取是不会跳过最后的一个字符的
cout << ch_arr
<<","<<(char)cin.peek()<< endl;//这里用cin.peek()查看当下cin读到了哪里
cin.ignore();//这个函数是将cin的读取指针跳过一个字节,如果当前字节是EOF(文件结尾),则结束跳过
cin.get(ch_arr, 3, '\\');
cout << ch_arr
<< ","<<(char)cin.peek()<<endl;
cin.getline(ch_arr, 3, '\\');//这种读取,在遇到'\'这个字符而结束的时候,我们将跳过'\'这个字符,cin指针指向下一个字符;但是如果是因为超出我们要读取的字节限制而结束的,那cin指针直接指向文件结尾(-1),下面的输入就是这种状况!
cout << ch_arr <<","<<cin.peek()<< endl;
return 0;
}
/*
此程序的运行结果:
输入:qwedsfd\wqfde\weds\
输出:qwedsfd,\
wq,f
fd,-1
*/
4、简单的文件输入输出的操作实例程序:
/*
从一个文件中读出里面存的一系列的整数,比较大小,将最大的存到另外一个文件当中去
*/
#include<iostream>
#include<fstream>
using namespace std;
int main(){
ifstream input("jicheng.txt", ios::in);//以只读的方式打开文件
ofstream output("jicheng2.txt", ios::out | ios::app);//在末尾追加文件,文件没有的话会新建文件
int maxn,secn;
input >> maxn;//这里要多说一句,因为用的是字符流的模式,所以是文件的对象能自动识别到底我们要读取的是什么类型的,如果申请的是一个char型的,那只读取文件的第一个字节的数据!
while (!input.eof()){//此处是判断是否读到文件末尾
input >> secn;
if (secn > maxn){//判断大小
maxn = secn;
}
}
output << maxn;//输出文件
input.close();//关闭文件
output.close();
return 0;
}
5、文件操作又例:
/*
一个简单的文件复制的程序,我碰到了编码的问题,这个似乎c++里面并不能修改文件的编码(java在这一点非常强大!)
*/
#include<iostream>
#include<fstream>
using namespace std;
int main(){
ifstream input("jicheng.txt", ios::in);
ofstream output("jicheng2.txt", ios::out);
char ch;
while (!input.eof()){
//input >> ch ;//这个方式读取是要忽略回车的!!
ch = input.get();
if (ch == '\n'){
cout << "这是回车!" << endl;
}
output << ch;
}
input.close();
output.close();
return 0;
}
6、基本字节流的操作。(书本上的这个例子很好,能全面的展示c++中对于字节流的输入与输出,所以我在此就把这个例子的代码打出来)
/*
有五个学生数据,要求:
(1)把他们存到磁盘上
(2)把磁盘上中的第1,3,5个学生数据读入程序,并显示出来
(3)将第3个学生的数据修改后存回磁盘文件中的原有位置
(4)从磁盘文件读入修改后的5个学生的数据并显示出来
*/
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
struct Student{
string name;
int age;
string sex;
};
int main(){
Student stu[5] = { {"j1",12,"男"}, {"j2",13,"女"}, {"j3",14,"男"}, {"j4",15,"女"}, {"j5",16,"男"} };
Student stu1;
ofstream iofile("jicheng.dat",ios::out| ios::binary);//此处我试了下,不知道是不是vs编译器的原因,不能同时读和写二进制文件,同时的话报错!有待进一步研究!所以在此,我分开了读和写
ifstream ifile("jicheng.dat", ios::binary);
if (!iofile||!ifile){
cerr << "open error!" << endl;
abort();
}
for (int i = 0; i < 5; i++){
iofile.write((char*)&stu[i], sizeof(stu[i]));
}
iofile.flush();//这个测试了下,一般io都有个缓存机制,如果这里不刷新缓存的换,后面的读是读不到数据的,因为文件中根本没有数据
cout << "修改前的3个数据:" << endl;
for (int i = 0; i < 5; i = i + 2){
ifile.seekg(sizeof(stu1)*i, ios::beg);//此为定位函数
ifile.read((char*)&stu1, sizeof(stu1));
cout << stu1.name << "," << stu1.age << "," << stu1.sex << endl;
if (i == 2){//此处当我读到第二个数据的时候,同时修改第二个数据!
iofile.seekp(sizeof(stu1)*i,ios::beg);
stu1.age = 144;
stu1.name = "j33";
stu1.sex = "女";
iofile.write((char*)&stu1, sizeof(stu1));
iofile.flush();
}
}
ifile.seekg(0, ios::beg);
cout << "修改后的5个数据:" << endl;
for (int i = 0; i < 5; i++){
ifile.read((char*)&stu1, sizeof(stu1));
cout << stu1.name << "," << stu1.age << "," << stu1.sex << endl;
}
iofile.close();
ifile.close();
return 0;
}
p.s:在谭浩强这本书中,对于二进制文件的读取写的非常少,只简简单单的写了几页,这部分在以后的primer会着重加强。不过自我感觉用原生的c++读文件的情况还是较少的,似乎都是调用系统本身的API来进行文件IO,我觉得以后项目中应该都是这样!
相关推荐
### C++程序设计谭浩强版 #### 一、引言 ...通过上述对《C++程序设计谭浩强版》各章节内容的梳理,我们可以看出这本书覆盖了C++编程从基础知识到高级特性的各个方面,非常适合初学者系统学习C++编程。
### 谭浩强《C++程序设计》内容概览 #### 第1篇 基本知识 第1章 C++的初步知识 - 1.1 从C到C++:介绍了C++语言的发展历程,如何从C语言演化而来。 - 1.2 最简单的C++程序:展示了最基本的C++程序结构。 - 1.3 C++...
谭浩强版《C++程序设计》课件是对教材内容的一种详细梳理与总结,它覆盖了从C++的基础语法到面向对象编程的核心概念。下面将根据课件的目录,对各章节涉及的关键知识点进行详细的解析。 #### 第1篇 基本知识 **第1...
通过以上章节的知识点梳理,我们可以看出《C++程序设计谭浩强100%完整·清华大学》这本书系统全面地覆盖了C++语言的基础知识、面向过程编程以及面向对象编程的核心概念和技术。对于初学者来说,这是一本非常适合入门...
以上是《谭浩强C++程序设计》第二章中关于数据类型和表达式的详细知识点梳理,涵盖了整型常量、浮点数、字符常量、符号常量、变量定义及初始化、算术运算符等多个方面。通过这些知识点的学习,读者可以更好地理解C++...
### 谭浩强C语言程序设计知识点梳理 #### C语言概述 - **发展过程**:C语言由Dennis Ritchie于1972年在贝尔实验室开发完成,最初是为了移植Unix操作系统而设计的。 - **当代最优秀的程序设计语言**:C语言因其简洁...
### C语言程序设计知识点梳理 #### 一、C语言概述 **1.1 C程序结构特点** - **函数**: C程序的基本单位是函数。每个函数都有自己的功能,并且可以独立编译。 - **函数首部**: 包括函数类型、函数名以及参数列表...
通过上述知识点的梳理,我们可以看到谭浩强老师编著的《C++程序设计》这本书内容丰富,覆盖了C++语言的基础知识、面向过程的程序设计、面向对象的程序设计等多个方面,适合初学者系统学习C++语言。
《谭浩强C程序设计课件》是一套全面讲解C语言编程基础的教育资源,主要针对第三版的内容进行了详细的梳理和解读。这套课件涵盖了C语言的14个关键章节,旨在帮助初学者深入理解C语言的基本概念、语法结构以及编程技巧...
### C语言程序设计知识点梳理 #### 一、C语言概述 - **发展过程**:C语言起源于20世纪70年代初期,由贝尔实验室的丹尼斯·里奇基于B语言设计并实现。最初用于UNIX操作系统,后来因其高效性和灵活性而广泛应用于...
### C程序设计基础知识点梳理 #### 一、C语言简介 - **定义**: C语言是一种通用的、过程式的计算机程序设计语言,具有高效、灵活的特点。 - **地位**: 国际上最著名的高级程序设计语言之一,使用范围广泛。 - **...
### 谭浩强C语言讲义知识点梳理 #### 一、C语言概述 - **C语言的发展历程:** - C语言最初由Dennis Ritchie于1972年在贝尔实验室为Unix操作系统设计。 - 随后,由于其简洁、高效以及能够直接操作硬件等特点,在...
- **面向对象的程序设计语言**:虽然C语言本身不支持面向对象编程,但其衍生的C++语言支持此类编程范式。 - **C和C++的区别**:C++是基于C语言扩展而成的一种面向对象的编程语言,增加了类、对象等概念。 - **简单的...
- **当代最优秀的程序设计语言**:C语言因其简洁、灵活和强大,被广泛认为是学习编程的基础。它不仅适用于系统级编程(如操作系统和嵌入式系统),也用于应用软件开发。 - **C语言版本**:C语言经历了多个版本的发展...