第十二天:C基础之文件操作

  C文件操作目前是用C库里面的函数,包括fwrite  fread  fgets fputs  getc  putc  fopen  fclose fseek  fgetline

  老刘讲这几个函数的时候,给了我们足够多的时间来研究这些函数。通过man命令来查看这些函数的数据手册。主要看几个方面第一个是传进去的参数,第二个是看函数的功能,第三个看函数的返回值。以后接触的函数会更多。不可能每个都要老师讲。所以查看手册,看懂意思是非常重要的。

    对于外部函数的使用,要注意对结果进行判断。使用perror函数,分析错误。

    从文件读内容的函数为:fwrite fgets getc  getline

    fread 可以指定每次读多少数据 ,fgets每次读一串字符,getc 每次读一个字符 ,fgetline每次读一行。

     往文件写数据的函数为:fwrite ,fputs ,putc功能和上面的相反。

   打开和关闭函数fopen  fclose关于文件的操作都要用到这两个函数。

     fseek文件指针偏移函数 。第三个参数是偏移位置。有SEEK_SET SEEK_END SEEK_OUT SEEK_CUR

 1 #include<stdio.h>
 2
 3 int main()
 4 {
 5     FILE * fp;
 6     if((fp = fopen("hello","r"))==NULL){
 7         perror("open");
 8         return 1;
 9     }
10
11     int i = 0;
12     char c ;
13     for(i=0;i<5;i++){
14         c = getc(fp);
15         printf("%c",c);
16     }
17     printf("\n");
18     fseek(fp,0,SEEK_SET);
19     for(i=0;i<5;i++){
20         c = getc(fp);
21         printf("%c",c);
22     }
23     printf("\n");
24
25 }

fgetline函数可以说是这里面最复杂的函数了。因为还涉及到二级指针和堆操作。晚上的作业就一道题目 。源文件中每一行有三个部分,学号,姓名,分数。要求将这些信息存到结构体中,进行排序后输出到文件。源文件中每个部分用tab键分开

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<stdlib.h>
  4 struct person{
  5     char *number;
  6     char *name;
  7     int score;
  8
  9 };
 10 int main()
 11 {
 12 /*    打开输入文件,创建输出文件。
 13  *
 14  */
 15     FILE *in = NULL;
 16     FILE *out =NULL;
 17     in = fopen("table","r");
 18     if(in==NULL){
 19         perror("open");
 20         return 1;
 21     }
 22     out = fopen("sorttable","w");
 23     if(out==NULL){
 24         perror("open");
 25         return 1;
 26     }
 27 /*
 28  *    截取line里面的内容存到指针数组里面
 29  *
 30  */
 31     char *line = NULL;
 32     size_t n;
 33     ssize_t len;
 34     char *p[20]={0};
 35     char *k[20]={0};
 36     int i = 0;
 37     int j = 0;
 38     while((len = getline(&line,&n,in))!=EOF){
 39         *(p+i) = malloc(len);//记得free
 40         for(j=0;;j++){
 41             if(*(line+j) == ‘\n‘){
 42                 *(*(p+i)+j) = ‘\0‘;
 43                  break;
 44             }
 45                 *(*(p+i)+j) = *(line+j);
 46         }
 47         i++;
 48
 49         *(k+i) = *(p+i);
 50
 51     }
 52 /*
 53  *    将每行的内容按照\t截断成三分,存到二维数组中。
 54  *
 55  *
 56  */
 57     int m = i;
 58     char * src;
 59     char *tmp[3];
 60     struct person man[m];
 61     for(i=0;i<m;i++){
 62         for(j=0;j<3;j++){
 63             src = strstr(*(p + i),"\t");
 64             *(tmp+j) = strtok(*(p+i),"\t");
 65             *(p+i) = src + 1 ;
 66         }
 67         man[i].number = *(tmp+0);
 68         man[i].name = *(tmp+1);
 69         man[i].score = atoi(*(tmp+2));
 70     }
 71 /*
 72  *  用冒泡法对结构体数组进行排序
 73  *
 74  */
 75     struct person sttmp;
 76     for(i=0;i<m-1;i++){
 77         for(j=i+1;j<m;j++){
 78             if(man[i].score < man[j].score )
 79             {
 80                   sttmp = man[i];
 81                   man[i] = man[j];
 82                   man[j] =sttmp;
 83             }
 84         }
 85     }
 86 /*
 87  * 将结果输出到文件。
 88  *
 89  */
 90     char show[20];
 91     for(i=0;i<m;i++){
 92         fputs(man[i].number,out);    fputs("\t",out);
 93         fputs(man[i].name,out);        fputs("\t",out);
 94         sprintf(show,"%d",man[i].score);
 95         fputs(show,out);        fputs("\n",out);
 96
 97     }
 98
 99 /*
100  *释放堆中的内容,关闭文件。
101  *
102  */
103     for(i=0;i<m;i++)
104         free(*(k+i));
105     if(line)
106         free(line);
107
108     fclose(in);
109     fclose(out);
110
111 }
时间: 2024-11-21 04:31:40

第十二天:C基础之文件操作的相关文章

Go语言基础之文件操作

本文主要介绍了Go语言中文件读写的相关操作. 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件. 打开和关闭文件 os.Open()函数能够打开一个文件,返回一个*File和一个err.对得到的文件实例调用close()方法能够关闭文件. package main import ( "fmt" "os" ) func main() { // 只读方式打开当前目录下的main.go文件 file, err := os

Python基础之文件操作流与函数

一.文件操作 打开文件的方式有: r,只读模式(默认) w,只写模式(不可读:不存在则创建:存在则删除内容:) a,追加模式(可读:   不存在则创建:存在则只追加内容:) "+"表示可以同时读写某个文件 r+,可读写文件(可读:可写) w+,写读文件(可写:可读) a+,同a "b"表示处理二进制文件 rb wb 1."r"读取文件,并将文件输出出来,encoding="utf-8"是将文件读取出来以后转换成utf-8格式,

python基础之文件操作

文件操作有很多种 我们在这里可以大体分一下,文件的操作其实可以分为对文件整体的操作(创建文件,删除文件,重命名文件,获取文件属性)以及对文件内容的操作(修改文件内容) 先来看对文件整体的操作: 我们按照增删查改的顺序进行讲述 1  增 所谓增,即新建. 新建一个文件 f=open('lalal','w+') #如果该文件(lalal)不存在则创建,若存在则打开. 新建一个目录: >>> os.listdir() ['log', 'test1'] >>> os.mkdir

python函数基础 与文件操作

函数的定义 函数是通过赋值传递的,参数通过赋值传递给函数.def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下: 1 def function_name(arg1,arg2[,...]): 2 statement 3 [return value] 返回值不是必须的,如果没有return语句,则Python默认返回值None. 函数名的命名规则:函数名必须以下划线或字母开头,可以包含任意字母.数字或下划线的组合.不能使用任何的标点符号:函数名是区分大小写的.函数名不能是保留

python基础(三)文件操作和集合

一.文件操作 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 1.文件基本操作: f = open('file.txt','r') #以只读方式打开一个文件,获取文件句柄,如果是读的话,r可以不写,默认就是只读, 在python2中还有file方法可以打开文件,python3中file方法已经没有了,只有open frist_line = f.readline()#获取文件的第一行内容,返回的是一个list print(frist

Python学习基础篇—文件操作和集合

这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件file.txt: 我们哭了 我们笑着 我们抬头望天空 星星还亮着几颗 我们唱着 时间的歌 才懂得相互拥抱 到底是为了什么 因为我刚好遇见你 留下足迹才美丽 风吹花落泪如雨 因为不想分离 因为刚好遇见你 留下十年的期许 如果再相遇 我想我会记得你 我们哭了 我们笑着 我们抬头望天空 星星还亮着几颗 我们唱着 时间的歌 才懂得相互

Python基础3 文件操作、字符编码与转码

文件操作 对文件操作过程 打开文件,得到文件句柄赋值给变量 操作 关闭文件 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:   不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,同a "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用) rU r+U "b

python基础11 文件操作 ,字符编码

主要内容 文件操作 文件操作 打开文件的模式 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,同a r+:可读可写,若文件不存在,报错:w+: 可读可写,若文件不存在,创建. "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模

python基础(文件操作)

文件操作 1,文件路径 绝对路径:从根目录到目标文件路径 #绝对路径 f = open('d:\模特主妇护士班主任.txt',mode='r',encoding='UTF-8') content = f.read() print(content) f.close() 相对路径:根目录相同文件夹下的文件名 2,编码方式:utf-8,gbk....... 3,操作方式:只读,只写,追加,读写,写读..... 文件读取:以什么编码方式存储的就以什么编码方式打开 # f = open('文件路径',mo