`
为心中梦想挥剑的那一刹那
  • 浏览: 7380 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

c++程序设计梳理(谭浩强)13章

 
阅读更多

 平淡的一天。昨天通宵了下,说好的生物钟又乱了,无奈~起床自己做了道菜,胡萝卜、土豆、青椒切成丝一起炒,长辣椒放多了原因,感觉辣味十足,下次一定只能放一个这种辣椒,太给力了!昨晚回归了下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++编程。

    C++程序设计谭浩强100%完整·清华大学

    ### 谭浩强《C++程序设计》内容概览 #### 第1篇 基本知识 第1章 C++的初步知识 - 1.1 从C到C++:介绍了C++语言的发展历程,如何从C语言演化而来。 - 1.2 最简单的C++程序:展示了最基本的C++程序结构。 - 1.3 C++...

    C++程序设计谭浩强版本的课件

    谭浩强版《C++程序设计》课件是对教材内容的一种详细梳理与总结,它覆盖了从C++的基础语法到面向对象编程的核心概念。下面将根据课件的目录,对各章节涉及的关键知识点进行详细的解析。 #### 第1篇 基本知识 **第1...

    C++程序设计谭浩强100%完整·清华大学.pdf

    通过以上章节的知识点梳理,我们可以看出《C++程序设计谭浩强100%完整·清华大学》这本书系统全面地覆盖了C++语言的基础知识、面向过程编程以及面向对象编程的核心概念和技术。对于初学者来说,这是一本非常适合入门...

    《谭浩强C++程序设计》书本笔记自己整理--2016查询参考

    以上是《谭浩强C++程序设计》第二章中关于数据类型和表达式的详细知识点梳理,涵盖了整型常量、浮点数、字符常量、符号常量、变量定义及初始化、算术运算符等多个方面。通过这些知识点的学习,读者可以更好地理解C++...

    谭浩强c语言程序设计

    ### 谭浩强C语言程序设计知识点梳理 #### C语言概述 - **发展过程**:C语言由Dennis Ritchie于1972年在贝尔实验室开发完成,最初是为了移植Unix操作系统而设计的。 - **当代最优秀的程序设计语言**:C语言因其简洁...

    C语言程序设计 谭浩强 学习笔记 word doc

    ### C语言程序设计知识点梳理 #### 一、C语言概述 **1.1 C程序结构特点** - **函数**: C程序的基本单位是函数。每个函数都有自己的功能,并且可以独立编译。 - **函数首部**: 包括函数类型、函数名以及参数列表...

    C++程序设计

    通过上述知识点的梳理,我们可以看到谭浩强老师编著的《C++程序设计》这本书内容丰富,覆盖了C++语言的基础知识、面向过程的程序设计、面向对象的程序设计等多个方面,适合初学者系统学习C++语言。

    谭浩强C程序设计课件

    《谭浩强C程序设计课件》是一套全面讲解C语言编程基础的教育资源,主要针对第三版的内容进行了详细的梳理和解读。这套课件涵盖了C语言的14个关键章节,旨在帮助初学者深入理解C语言的基本概念、语法结构以及编程技巧...

    c程序设计基础

    ### C程序设计基础知识点梳理 #### 一、C语言简介 - **定义**: C语言是一种通用的、过程式的计算机程序设计语言,具有高效、灵活的特点。 - **地位**: 国际上最著名的高级程序设计语言之一,使用范围广泛。 - **...

    谭浩强c语言学习教程

    - **面向对象的程序设计语言**:虽然C语言本身不支持面向对象编程,但其衍生的C++语言支持此类编程范式。 - **C和C++的区别**:C++是基于C语言扩展而成的一种面向对象的编程语言,增加了类、对象等概念。 - **简单的...

    C语言程序设计教程(第3版) 19910-A0.zip

    在《C语言程序设计教程》第三版中,作者谭浩强教授可能会深入讲解这些基础知识,并通过实例解析如何编写、编译和运行C程序。书中可能会涵盖结构体、联合体、枚举、位运算等进阶主题,以及预处理指令和文件操作等实际...

Global site tag (gtag.js) - Google Analytics