• 文件操作板子


    基础知识(具体见《高级设计语言》P173)

    1、fopen打开文件,切记,一定是和fclose对应出现,有打开必然要有关闭

    在这里插入图片描述

    2、fclose关闭文件

    在这里插入图片描述

    3、文件打开的各种形式

    在这里插入图片描述

    4、fgetc、fputc

    在这里插入图片描述

    5、fgets、fputs

    在这里插入图片描述

    6、fscanf、fprintf格式化读写

    在这里插入图片描述

    7、文件读写指针操作:rewind、fseek

    在这里插入图片描述

    8、文件读写指针操作:ftell、feof

    在这里插入图片描述

    9、fread、fwrite

    在这里插入图片描述
    在这里插入图片描述

    具体题目

    计专2019(P88)

    在这里插入图片描述

    思路

    1、根据教师信息的格式构建结构体,为创建链表做准备

    typedef struct teacher {//根据文件之中每条信息的格式,建立结构体,数据类型得具体按照题意设置
    	char workNum[10];
    	int sex;
    	char name[20];
    	int year;
    	teacher* next;
    }teacher;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2、打开文件

    	FILE* fp = fopen("input.txt", "r");//fopen,传入文件名称,读写方式,返回一个file类型的指针
    
    
    • 1
    • 2

    3、用格式化fscaf读取数据
    注意:%s不用&符号,%d需要&符号,和scanf规则一致

    		fscanf(fp, "%s,%d,%s,%d", tmp->workNum, &tmp->sex, tmp->name, &tmp->year);
    
    
    • 1
    • 2

    4、判断是否读取完毕

    		if (feof(fp)) {//判断是否读取完毕
    			break;
    		}
    
    • 1
    • 2
    • 3

    5、最后一定要把文件关闭

    	fclose(fp); //记得关闭文件,否则可能会是扣分点(有开就有关)
    
    • 1

    代码

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    using namespace std;
    typedef struct teacher {//根据文件之中每条信息的格式,建立结构体,数据类型得具体按照题意设置
    	char workNum[10];
    	int sex;
    	char name[20];
    	int year;
    	teacher* next;
    }teacher;
    teacher* function_three() {
    	FILE* fp = fopen("input.txt", "r");//fopen,传入文件名称,读写方式,返回一个file类型的指针
    	teacher* head = (teacher*)malloc(sizeof(teacher));//建立哨兵节点(利用头插法,少一个指针,方便控制)
    	while (1) {//开始读取数据
    		teacher* tmp = (teacher*)malloc(sizeof(teacher));//建立节点,准备接收数据
    		//用fscanf读取数据,参数文件指针,后两项和scanf一样
    		fscanf(fp, "%s,%d,%s,%d", tmp->workNum, &tmp->sex, tmp->name, &tmp->year);
    		if (feof(fp)) {//判断是否读取完毕
    			break;
    		}
    		//开始头插法,插入到哨兵节点后面
    		tmp->next = head->next;
    		head->next = tmp;
    	}
    	fclose(fp); //记得关闭文件,否则可能会是扣分点(有开就有关)
    	return head;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    软专2021(P85)

    思路

    1、链表创建
    <1>先在外面建立好哨兵
    <2>再循环建立节点,头插法插入
    2、分割链表
    <1>准备好新链表表头哨兵
    <2>从原来链表上开始遍历(双指针法),遇到需要拆分的,把节点先拆下来,把原本的链安好,再把这个节点头插法进新的链表
    3、写入文件
    <1>总体思路:打开-写入-关闭
    <2>使用函数:fprintf格式化写入,fopen打开文件,fclose关闭文件

    代码

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    using namespace std;
    struct TreeNode {
    	int val;
    	TreeNode *left;
    	TreeNode *right;
    	TreeNode() : val(0), left(nullptr), right(nullptr) {}
    	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    	TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    };
    
    struct node {
    	int val;
    	node* next;
    };
    void function_five() {
    	int n = 0;
    	cin >> n;
    	//创建链表
    	node *head = (node*)malloc(sizeof(node));//哨兵
    	head->next = nullptr;
    	for (int i = 0; i < n; i++) {
    		node *tmp = (node*)malloc(sizeof(node));
    		cin >> tmp->val;
    		tmp->next = head->next;//头插法
    		head->next = tmp;
    	}
    	//分割链表(仅练习,用奇偶性)
    	node *ano = (node*)malloc(sizeof(node));//连接奇数项
    	ano->next = nullptr;
    	node *pre = head, *cur = head->next;
    	while (cur != nullptr) {
    		if (cur->val % 2 != 0) {
    			node* tmp = cur;//从原链表中拆下来
    			cur = cur->next;
    			pre->next = cur;
    			tmp->next = ano->next;//把该节点头插法进入ano的新链表
    			ano->next = tmp;
    		}
    	}
    	//写入文件(打开-操作-关闭)
    	FILE* fp1 = fopen("****.txt", "w");
    	FILE* fp2 = fopen("****.txt", "w");
    	node *c = head->next, *q = ano->next;//因为有哨兵
    	while (c != nullptr) {
    		fprintf(fp1, "%d", c->val);
    	}
    	while (q != nullptr) {
    		fprintf(fp2, "%d", q->val);
    	}
    	fclose(fp1);
    	fclose(fp2);
    	return;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
  • 相关阅读:
    PythonAppium自动化测试环境搭建
    字符串对齐
    行业资讯 | 入门revit软件需要理清哪些概念。
    Kafka Tool(Kafka 可视化工具)安装及使用教程
    QT系列教程(11) TextEdit实现Qt 文本高亮
    企业端固废动态监测管控系统有哪些功能组成
    简单入门HTTP协议和HTTPS协议的相关知识点
    【AspectJX】Android 中快速集成使用一款 AOP 框架并附加数据埋点解决方案实现
    学习Autodock分子对接
    [前端]Preprocessor dependency "less" not found.
  • 原文地址:https://blog.csdn.net/qq_45678698/article/details/128174000