Programming abstractions in C阅读笔记:p139-p143
《Programming Abstractions In C》学习第55天,p139-p140,总结如下:
一、技术总结
1.文件I/O操作
文件I/O操作可以分为一下这些步骤:
(1)声明文件指针对象。
File *infile;
(2)打开文件
fopen()。打开文件的模式有“r”, "w", "a"三种模式。
(3)传输数据
读取文件的方式可以是character by character( getc()/putc() ),也可以是line by line( fget()/fput() )。
(4)关闭文件
fclose()。
2.文件I/O操作示例:复制文件
#include <stdio.h>
#include <stdbool.h> // for bool, true, false data type
#include <stdlib.h> // for exit()
void CopyRemovingComments(FILE *infile, FILE *outfile);
int main() {
// 声明文件指针对象
FILE *infile, *outfile;
char *infileName, *outfileName;
/*
* 打开文件:fopen()
* 如果文件不存在,则返回NULL,所以需要检查
*/
infileName = "D:\\CProject\\chater3.4\\jabber.txt"; // 这里使用的是绝对路径,也可以使用相对路径
outfileName = "D:\\CProject\\chater3.4\\jabbercopy.txt";
infile = fopen(infileName, "r");
if (infile == NULL) {
printf("Cannot open input file: %s \n", infileName);
exit(0);
}
/*
* 传输数据
* 传输数据有很多种方式,例如chracter by character(getc/putc),line by line(fget/fput, ReadLine)
* 为了解决stdio.h存在的一些问题,作者对stdio进行了封装,封装后得到的的是simpio
*/
outfile = fopen(outfileName, "w");
if (outfile == NULL) {
printf("Cannot open output file: %s \n", outfileName);
exit(0);
}
CopyRemovingComments(infile, outfile);
/*
* 关闭文件
*/
fclose(infile);
fclose(outfile);
printf("Copying is completed");
return 0;
}
void CopyRemovingComments(FILE *infile, FILE *outfile) {
int ch, nch;
bool commentFlag; // 这里使用的是stdbool.h接口中的bool
commentFlag = false; // 这里使用的是stdbool.h接口中的false,书中使用的是封装后的FALSE
while ((ch = getc(infile)) != EOF) {
if (commentFlag) {
if (ch == '*') {
nch = getc(infile); //
if (nch == '/') {
commentFlag = false;
} else {
ungetc(nch, infile);
}
}
} else {
if (ch == '/') {
nch = getc(infile);
if (nch == '*') {
commentFlag = true;
} else {
ungetc(nch, infile);
}
}
if (!commentFlag) {
putc(ch, outfile);
}
}
}
}
二、英语总结
1.endpoint什么意思?
答:c.the end of sth(终点)。
2.transfer什么意思?
答:transfer也是一个在计算机相关资料中经常看到的词。p140, For an input file, the function read data from the file into your program; for an output file, the function transfer data from the program to the file。数据从文件到程序中,或者从程序中到文件,即是一种transfer。通过该例句,对tranfer有一个形象的了解。
3.intermix什么意思?
答:
(1)解释:vi/vt. to combine two or more different things。
(2)搭配:intermix sth with sth。
(3)例句:p140, Doing so allows you to intermix numeric data with strings and other data types。
三、参考资料
1. 编程
(1)Eric S.Roberts,《Programming Abstractions in C》:https://book.douban.com/subject/2003414
2. 英语
(1)Etymology Dictionary:https://www.etymonline.com
(2) Cambridage Dictionary:https://dictionary.cambridge.org
欢迎搜索及关注:编程人(a_codists)
Programming abstractions in C阅读笔记:p139-p143的更多相关文章
- Mongodb Manual阅读笔记:CH3 数据模型(Data Models)
3数据模型(Data Models) Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mon ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画 学习目标 熟悉蒙皮动画的术语: 学习网格层级变换 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十一章:模板测试
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十一章:模板测试 代码工程地址: https://github.co ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制 代码工程地址: https://gi ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化 学习目标 对Direct 3D编程在 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二章:矩阵代数
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二章:矩阵代数 学习目标: 理解矩阵和与它相关的运算: 理解矩阵的乘 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第一章:向量代数
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第一章:向量代数 学习目标: 学习如何使用几何学和数字描述 Vecto ...
- 阅读笔记 1 火球 UML大战需求分析
伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本 <火球 UML大战需求分析>,首先 ...
- [阅读笔记]Software optimization resources
http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++ 7. The efficiency of differe ...
- 《uml大战需求分析》阅读笔记05
<uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...
随机推荐
- 如何进行测试分析与设计-HTSM启发式测试策略模型 | 京东云技术团队
测试,没有分析与设计就失去了灵魂: 测试人员在编写用例之前,该如何进行测试分析与设计呢?上次在<测试的底层逻辑>中讲到了[输入输出测试模型],还讲到了[2W+1H测试分析法],但2W1H分 ...
- 「GPT虚拟直播」实战篇|GPT接入虚拟人实现直播间弹幕回复
摘要 ChatGPT和元宇宙都是当前数字化领域中非常热门的技术和应用.结合两者的优势和特点,可以探索出更多的应用场景和商业模式.例如,在元宇宙中使用ChatGPT进行自然语言交互,可以为用户提供更加智 ...
- 基于Quartz的可视化UI操作组件GZY.Quartz.MUI更新说明(附:在ABP中集成GZY.Quartz.MUI可视化操作组件)
前言 时隔2年.(PS:其实陆陆续续在优化,不过没发博客).. .本组件又迎来了新的更新... 很久没更新博客了.生了娃,换了工作单位,太忙了..实在抱歉 NET Core 基于Quartz的UI可视 ...
- ChatGPT使用案例,助你快速上手,做事事半功倍
ChatGPT介绍 首先我们来看一下chat-gpt自己的介绍: ChatGPT的发展历程 2015年,OpenAI成立,致力于研究和开发人工智能技术.在成立初期,OpenAI的创始人之一Elon M ...
- Linux安装MongoDB 4.0.3
Linux安装MongoDB 4.0.3 1.准备 CentOS下安装MongoDB 官网提供windows.Linux.OSX系统环境下的安装包,这里主要是记录一下在Linux下的安装.首先到官 ...
- macOS 系统 Kafka 快速入门
Kafka 的核心功能是高性能的消息发送与高性能的消息消费.以下是 Kafka 的快速入门教程. 下载并解压缩 Kafka 二进制代码压缩文件 打开 Kafka 官网的下载地址,可以看到不同版本的 K ...
- Oracle sql 错误 : ORA-01861: 文字与格式字符串不匹配和日期与字符串互转问题解决
正确的要这样的: public int update(String ceratedate); <update id="update" parameterType=" ...
- RabbitMQ 多消费者 使用单信道和多信道区别
RabbitMQ 多个消费者共用一个信道实例 与 每个消费者使用不同的信道实例 区别: 1. 多个消费者共用一个信道实例:这种方式下,多个消费者共享同一个信道实例来进行消息的消费. 优点:这样可以减少 ...
- Java扩展Nginx之三:基础配置项
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 经历了前面两篇的入门和编译源码之后,从本篇起 ...
- CF961E Tufurama题解
我们维护一个存储下标数据的树状数组,先将 \(1\sim n\) 插入树状数组. 用 \(a\) 表示原数组,\(b\) 表示按照 \(a_i\) 排序后的数组. 我们从 \(1\) 开始统计,直到 ...