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