Programming abstractions in C阅读笔记:p139-p143

《Programming Abstractions In C》学习第55天,p139-p140,总结如下:

一、技术总结

1.文件I/O操作

文件I/O操作可以分为一下这些步骤:

(1)声明文件指针对象。

c 复制代码
File *infile;

(2)打开文件

fopen()。打开文件的模式有"r", "w", "a"三种模式。

(3)传输数据

读取文件的方式可以是character by character( getc()/putc() ),也可以是line by line( fget()/fput() )。

(4)关闭文件

fclose()。

2.文件I/O操作示例:复制文件

c 复制代码
#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)

相关推荐
水饺编程16 分钟前
编程数学:三角函数基础01,直角三角函数
c语言·c++·windows·visual studio
LuminousCPP18 分钟前
数据结构-排序(一):基础排序算法横向对比|冒泡、插入、希尔、堆与双向选择,详解二分 / Knuth 增量
c语言·数据结构·笔记·算法·排序算法
初願致夕霞19 分钟前
C/C++传统程序内存分布(代码实测)
java·c语言·c++
柳鲲鹏1 小时前
股票打新,中签为什么难?
笔记
亮工硬件1 小时前
1-8 简易串口通讯协议(UART + 自定义帧协议)
笔记·stm32·单片机·嵌入式硬件·学习
志尊宝1 小时前
Vue3 零基础每日笔记(004):模板语法初识——插值表达式、v-bind、v-on 一次学会
javascript·vue.js·笔记
SatanII2 小时前
OpenStack核心组件详解|Keystone+Glance+Nova+Cinder原理与实操笔记
网络·笔记·openstack
wuyk5552 小时前
从零吃透 MQTT 通信|第 6 章 MQTT 主题、过滤器、通配符、订阅管理、拒收机制详解与代码实现
c语言·stm32·学习
点心的游戏开发世界11 小时前
GDScript 入门笔记(十一):Lambda 与匿名函数
开发语言·笔记·游戏引擎·godot
摇滚侠11 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 使用 JdbcTemplate 阅读笔记 32
spring boot·笔记·后端