C语言——文件 *** 作&&考核仨题

C语言——文件 *** 作&&考核仨题,第1张

文件

什么是文件
文件是数据源的一种,他最主要的作用就是保存数据。作为计算机不可或缺的一部分,文件可以储存很多不同种类的信息。
文件(file)通常是在磁盘或固态硬盘上的一段已命名的存储区。例如在c语言中常出现的stdio.h就是一个文件的名称,该文件中包含的就是头文件内的相关信息。
文件的分类
在C语言中,程序提供了两种文件模式:文本模式和二进制模式。
文本模式:文本文件只能存储char型字符变量。它通过文本编辑器就能对其中的数据进行修改。文本文件实质上也是一种特殊的二进制文件,因为它在磁盘上的存储方式也是二进制形式。
二进制模式:在二进制文件格式中,文件内的所有内容都以二进制形式(0或1)存储。所以它存储的类型是多样的。对于不同类型的二进制文件,如果想要准确的得到它所存储的信息,那就必须需要特别的解码器。
那么这两种类型的文件有什么优缺点呢?文本文件存储的都是字符类型,所以每个字符所占的位置都是相同的,因而在对这段字符进行译码 *** 作时,就会相对来说比较方便。而二进制文件的存储利用率更加高。例如一个高位数字,你用文本文件来存放,就会需要相应长度的空间。而二进制文件只需要一个int或long类型的空间就行了,所占的内存就会相对来说更小点。
如何打开文件?
如果我们要对文件进行 *** 作,那我们必须建立起和文件之间的连接。先向大家介绍文件的打开函数。那么在C语言中,存储在中的fopen( )函数就可以打开文件。
那么我们来具体看fopen这个函数:FILE * fopen(char * filenname,char * mode);
filename是这个文件的名称(包括文件路径),而mode则问打开方式。
然后我们返回一个FILE类型的指针。FILE类型是一个结构体,它是用来保存文件信息的。

FILE * fp;
fp = fopen(char *str1, "str2");

FILE * fp;
fp = fopen("D:\学生管理系统\jiaoshizhanghao.txt","a");


如何关闭文件?
文件一旦使用完毕,我们就应该对文件进行关闭,以释放掉相关资源。这可以保证空间不会被乱利用,而导致文件发生丢失。
int fclose ( FILE * fp);

FILE * fp;
fp = fopen("D:\学生管理系统\jiaoshizhanghao.txt","a");
fclose(fp);

文件打开阶段的 *** 作
了解完这两部分,让我们来简单动手 *** 作下文件的相关 *** 作,以此加深我们的印象:
1.

#include
#include
int main(void) {
	FILE* fp = fopen("D:\c语言\新建文本文档.txt", "r");
	if (fp == NULL) {
		puts("文件打开失败");
	}
	char str[25];
	while (fgets(str, 24, fp)!=NULL) {//读取文件信息并打印
		printf("%s", str);
	}
	fclose(fp);
	return 0;
}

结果:

出现这个问题的原因是文件本身编码出现问题,把文件类型改为ANSI即可。

更改后输出结果:

2.提取文件信息到链表里:

struct zhanghu *tiqu(const char name[]) {//提取文件信息 
	FILE *fp = fopen(name, "r");
	if (fp == NULL) {
		printf("未找到文件%s\n", name);
		exit(0);
	}
	struct zhanghu *head = (struct zhanghu * )malloc(sizeof(struct zhanghu));
	head->next = NULL;
	while (!feof(fp)) {
		struct zhanghu *p = (struct zhanghu * )malloc(sizeof(struct zhanghu));
		fscanf(fp, "%s %s %s\n", p->zhanghao, p->mima, p->classnum);
		p->next = head->next;
        head->next = p;
	}
	fclose(fp);
	return head;
}

考核后仨道题:

bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target) {
    if (matrix == NULL || matrixSize == 0 || *matrixColSize == 0 ) {
        return false;
    }
    int i, j; 
    for (i = 0, j = *matrixColSize - 1; i < matrixSize && j >= 0;) {
        if (target < matrix[i][j]) {//越左->越小
            j--;//向左移动寻找小于等于target的数
        } else if (target > matrix[i][j]) {//越下->越大
            i++;//向下移动寻找大于等于target的数
        } else {//不大不小->刚刚好
            return true;
        }
    }
    return false;
}

int translateNum(int num) {
    if (num < 10) {
    	return 1;
	}
	int arr = 0, i;
	int n = num;
	while (n > 0) {
		n = n / 10;
		arr++;
	}
	int nums[100] = {0};
	for (i = arr - 1; i >= 0; i--) {
		nums[i] = num % 10;
		num = num / 10;
	}
	int a[100];
	a[0] = 1;
	if (nums[0] * 10 + nums[1] <= 25) {
		a[1] = 2;
	} else {
		a[1] = 1;
	}
	for (i = 2; i < arr; i++) {
		if (nums[i] + nums[i - 1] * 10 <= 25 && nums[i] + nums[i - 1] * 10 > 9) {
			a[i] = a[i - 1] + a[i - 2];
		} else {
            a[i] = a[i - 1];
        }
	}
	return a[arr - 1];
}

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
    struct ListNode * head = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode * p = head;
    while (list1 && list2) {
    	if (list1->val < list2->val) {
    		head->next = list1;
    		list1 = list1->next;
    		head = head->next;
		} else {
			head->next = list2;
    		list2 = list2->next;
    		head = head->next;
		}
	}
	if (list1 == NULL) {
		head->next = list2;
	} else {
		head->next = list1;
	}
	return p->next;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/873032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存