第六章 文件操作

前言:第五章是C语言在数学上的一些应用,我觉得没有必要,便跳过了。这章正如我标题所写的,是C语言在文件上的操作。学习了这个后,你们可以自行编辑一些所需的快捷程序,来实现一些既定的目的,完成一些重复操作。

PS:本文中例子皆采用了相对路径,请注意路径问题。

6.1  文件读写操作

  PS:首先确立一个概念,C语言中的“文件”只是一个逻辑概念,可以用来表示从磁盘文件到终端等所有东西,就如同DOS一样的。在这一节中,我们要先学会对磁盘文件进行打开或读写操作的几种不同方法,然后就可以根据不同情况来选择最为恰当的操作方式。

实例167  读取磁盘文件

问题:编程实现读取某一相对下文本文档内容。(事先放入一个文本内容为“hello world hello master”。)

逻辑:该实例利用到了一些与文件操作相关的函数。

  •  fopen 文件的打开函数:

    FILE *fp

    fp=fopen(文件名,使用文件方式)

 例如:fp=fopen("123","r");

 它表示要打开名称为123的文本文档,使用文件打开方式为“只读”,fopen函数带回指向123.txt文件的指针并赋给fp,也就是FILE类型指针fp指向123.txt文件。

  PS:使用文件方式:

  “r”  (只读):打开一个文本文件,只允许读数据。

  “w”  (只写):打开或建立一个文本文件,只允许写数据。

  “a”  (追加):打开一个文本文件,并在文件末尾写数据。

  “rb”  (只读):打开一个二进制文件,只允许读数据。

  “wb”  (只写):打开或建立一个二进制文件,只允许写数据。

  “ab”  (追加):打开一个二进制文件,并在文件末尾写数据。

  “r+”  (读写):打开一个文本文件,允许读和写。

  “w+”  (读写):打开或建立一个文本文件,允许读写。

  “a+”  (读写):打开一个文本文件,允许读,或在文件末尾追加数据。

  “rb+”  (读写):打开一个二进制文件,允许读和写。

  “wb+”  (读写):打开或建立一个二进制文件,允许读和写。

  “ab+”  (读写):打开一个二进制文件,允许读,火灾文件末尾追加数据。

  • fclose 文件的关闭函数:

   fclose(文件指针)

   作用是通过文件指针将该文件关闭。

  • fgetc函数:

   ch=fgetc(fp)

   该函数作用是从指定的文件(fp指向的文件)读入一个字符赋给ch。注意该文件必须是以读或读写方式打开。

其实,说到这里,大家基本就有了问题的思路了。通过fopen函数打开目标文件,将其内存地址赋给fp。再利用循环结构。通过fgetc函数将文件内字符依次赋给ch,显示在屏幕上。最后通过fclose函数关闭文件。

代码:

 #include <stdio.h>
main()
{
FILE *fp;      /*定义一个指向FILE类型结构体的指针变量*/
char ch, filename[];    /*定义变量及数组为字符型*/
printf("please input file`s name;\n");
gets(filename);      /*输入文件所在路径及名称*/
fp = fopen(filename, "r");    /*以只读方式打开指定文件*/
ch = fgetc(fp);      /*fgetc函数带回一个字符赋给ch*/
while (ch != EOF)     /*当读入的字符值等于EOF时结束循环*/
{
putchar(ch);     /*将读入的字符输出在屏幕上*/
ch = fgetc(fp);     /*fgetc函数继续带回一个字符赋给ch*/
}
fclose(fp);     /*关闭文件*/
}

注意:EOF表示End Of File,文件读取结束。其值通常为-1,也常在其他函数中表达调用失败的意思。EOF只能用于文本文件。

反思:其实一开始接触C语言的文件操作会有一些不理解。但是如果有一定汇编或者Win32基础,就会觉得很好理解它的行为了。原本的文件存放于硬盘内存中,利用fopen函数打开它,就是将其展开到内存空间中,并将其内存地址首地址赋给了fopen函数,即fopen函数的返回值。接下来的行为就和正常C语言中指针读取数组内容相似了。最后,通过fclose函数关闭该文件,即将该文件从内存空间中释放。

实例168  将数据写入磁盘文件

问题:编程实现向任意路径下新建一个文本文档,想该文档中写入you are the best one!,以“#”结束字符串的输入。

逻辑:本实例又用到了一个新的函数。

  • fputc函数:

    ch=fputc(ch,fp)

    该函数作用是将一个字符ch写到fp指向的文件内。

    PS:fputc函数的返回值在成功时,为输入的字符,失败时,为EOF。

代码:

 #include <stdio.h>
main()
{
FILE *fp;     /*定义一个指向FILE类型结构体的指针变量*/
char ch, filename[]; /*定义变量及数组为字符型*/
printf("please input filename:\n");
scanf("%s", filename); /*输入文件所在路径及名称*/
if ((fp = fopen(filename, "w")) == NULL) /*以只写方式打开指定文件*/
{
printf("cannot open file\n");
exit();
}
ch = getchar();    /*fgetc函数带回一个字符赋给ch*/
while (ch != '#')   /*当输入"#"时结束循环*/
{
fputc(ch, fp); /*将读入的字符写到磁盘文件上去*/
ch = getchar();    /*fgetc函数继续带回一个字符赋给ch*/
}
fclose(fp);    /*关闭文件*/
}

注意:代码行.8中条件判断条件“(fp = fopen(filename, "w")) == NULL)”的使用,细细理解。

反思:同样利用汇编基础可以很好理解,不再赘述。

实例169:  格式化读写文件

问题:编程实现将输入的小写字母串写入磁盘文件,再将刚写入磁盘文件的内容读出并以大写字母的形式显示在屏幕上。

逻辑:同样,这次实例又有一些新的函数。

  • fprintf函数:

    ch=fprintf(文件指针,格式字符串,输出列表)

 例如:fprintf(fp,"%d",i);

 它表示将整型变量i的值按%d的格式输出到fp指向的文件上。

  • fscanf函数:

    fscanf(文件指针,格式字符串,输入列表)

 例如:fscanf(fp,"%d",&i);

 它表示以%d的格式读入fp所指向的文件上i的值。

代码:

 #include <stdio.h>
main()
{
int i, flag = ;    /*定义变量为基本整型*/
char str[], filename[]; /*定义数组为字符型*/
FILE *fp;     /*定义一个指向FILE类型结构体的指针变量*/
printf("please input filename:\n");
scanf("%s", filename);   /*输入文件所在路径及名称*/
if ((fp = fopen(filename, "w")) == NULL) /*以只写方式打开指定文件*/
{
printf("cannot open!");
exit();
}
while (flag == )
{
printf("\nInput string:\n");
scanf("%s", str); /*输入字符串*/
fprintf(fp, "%s", str); /*将str字符串内容以%s形式写到fp所指文件上*/
printf("\nContinue:?(Y/N)");
if ((getchar() == 'N') || (getchar() == 'n')) /*输入n结束输入*/
flag = ;   /*标志位置0*/
}
fclose(fp);    /*关闭文件*/
fp = fopen(filename, "r"); /*以只写读方式打开指定文件*/
while (fscanf(fp, "%s", str) != EOF) /*从fp所指的文件中以%s形式读入字符串*/
{
for (i = ; str[i] != '\0'; i++)
if ((str[i] >= 'a') && (str[i] <= 'z'))
str[i] -= ;   /*将小写字母转换为小写字母*/
printf("\n%s\n", str); /*输出转换后的字符串*/
}
fclose(fp);    /*关闭文件*/
}

注意:代码行.12中“exit(0)”一点运行,就直接退出程序。其表示正常退出。另外,exit(1)表示异常退出,即程序出现不该出现的异常。windows中可以通过GetExitCodeProcess函数来获取退出代码。

反思:这个实例只能说是前两个实例的小小综合,再加上str的应用。大小写字母转换这种老问题,就不提了。

实例170  成块读写操作

问题:编程实现学生成绩信息统计,从键盘中输入学生成绩信息,保存到指定磁盘文件中,输入完全部信息后将磁盘文件中保存的信息输出到屏幕上。

逻辑:老惯例,再来几个新函数。

  • fwrite函数:

   fwrite(buffer ,size,count,fp)

   它的作用是将buffer地址开始的信息,输入count次,每次写size字节到fp所指定的文件中。

  • fread函数:

   fread(buffer,size,count,fp)

   它的作用是从fp所指向的文件中读入count次,每次读size字节,读入的信息存在buffer地址中。

注意这两个函数形参即其代表的意思,毕竟参数还是蛮多的。

代码:

 #include <stdio.h>
struct student_score /*定义结构体存储学生成绩信息*/
{
char name[];
int num;
int China;
int Math;
int English;
} score[];
void save(char *name, int n) /*自定义函数save,用于将数据存储起来*/
{
FILE *fp;    /*定义一个指向FILE类型结构体的指针变量*/
int i;
if ((fp = fopen(name, "wb")) == NULL) /*以只写方式打开指定文件*/
{
printf("cannot open file\n");
exit();
}
for (i = ; i < n; i++)
if (fwrite(&score[i], sizeof(struct student_score), , fp) != )  /*将一组数据输出到fp所指的文件中*/
printf("file write error\n");   /*如果写入文件不成功,则输出错误*/
fclose(fp);  /*关闭文件*/
}
void show(char *name, int n)    /*自定义函数show,用于将数据展现到显示屏上*/
{
int i;
FILE *fp;    /*定义一个指向FILE类型结构体的指针变量*/
if ((fp = fopen(name, "rb")) == NULL) /*以只读方式打开指定文件*/
{
printf("cannot open file\n");
exit();
} for (i = ; i < n; i++)
{
fread(&score[i], sizeof(struct student_score), , fp); /*从fp所指向的文件读入数据存到数组score中*/
printf("%-10s%4d%4d%4d%4d\n", score[i].name, score[i].num,
score[i].China, score[i].Math, score[i].English);
}
fclose(fp);    /*以只写方式打开指定文件*/
}
main()
{
int i, n;   /*变量类型为基本整型*/
char filename[]; /*数组为字符型*/
printf("how many students in your class?\n");
scanf("%d", &n); /*输入学生数*/
printf("please input filename:\n");
scanf("%s", filename); /*输入文件所在路径及名称*/
printf("please input name,number,China,math,English:\n");
for (i = ; i < n; i++) /*输入学生成绩信息*/
{
printf("NO%d", i + );
scanf("%s%d%d%d%d", score[i].name, &score[i].num, &score[i].China,
&score[i].Math, &score[i].English);
save(filename, n);   /*调用函数save*/
} show(filename, n);   /*调用函数show*/
}

注意:代码行.35中“%-10s%4d%4d%4d%4d\n”,希望还记得printf函数输出格式的设置。代码行.35-36,如果看不懂,请将代码分解开来,这句代码只是一个小小的综合应用。

实例171  随机读写文件

问题:输入若干个学生信息,保存到指定磁盘文件中,要求将奇数条学生信息从磁盘中读入并显示在屏幕上。

逻辑:再介绍一个函数。

  • fseek函数:

    fseek(文件类型指针,位移量,起始点)

    它的作用是用来移动文件内部位置指针,其中参数“起始点”表示从何处开始计算位移量。规定的起始点有3种:文件首、文件当前位置和文件尾。

  PS:起始点表示法:

  “起始点”    “表示符号”      “数字表示”

  “文件开头”   “SEEK-SET”     “0”

  “当前位置”   “SEEK-CUR”     “1”

  “文件末尾”   “SEEK-END”     “2”

 例如:fseek(fp,-20L,1);

 它表示将位置指针从当前位置,向后退20字节。(注意后退的意思。)

代码:

 #include <stdio.h>
struct student_type   /*定义结构体存储学生信息*/
{
char name[];
int num;
int age;
}stud[];
void save(char *name, int n) /*自定义函数save*/
{
FILE *fp;
int i;
if ((fp = fopen(name, "wb")) == NULL) /*以只写方式打开指定文件*/
{
printf("cannot open file\n");
exit();
}
for (i = ; i < n; i++)
if (fwrite(&stud[i], sizeof(struct student_type), , fp) != ) /*将一组数据输出到fp所指的文件中*/
printf("file write error\n"); /*如果写入文件不成功,则输出错误*/
fclose(fp); /*关闭文件*/
}
main()
{
int i, n;  /*变量类型为基本整型*/
FILE *fp;   /*定义一个指向FILE类型结构体的指针变量*/
char filename[]; /*数组为字符型*/
printf("please input filename:\n");
scanf("%s", filename); /*输入文件所在路径及名称*/
printf("please input the number of students:\n");
scanf("%d", &n); /*输入学生数*/
printf("please input name,number,age:\n");
for (i = ; i < n; i++) /*输入学生信息*/
{
printf("NO.%d", i + );
scanf("%s%d%d", stud[i].name, &stud[i].num, &stud[i].age);
save(filename, n); /*调用函数save*/
} if ((fp = fopen(filename, "rb")) == NULL)   /*以只读方式打开指定文件*/
{
printf("can not open file\n");
exit();
}
for (i = ; i < n; i += )
{
fseek(fp, i *sizeof(struct student_type), ); /*随着i的变化从文件开始处随机读文件*/
fread(&stud[i], sizeof(struct student_type), , fp); /*从fp所指向的文件读入数据存到数组stud中*/
printf("%-10s%5d%5d\n", stud[i].name, stud[i].num, stud[i].age);
}
fclose(fp); /*关闭文件*/
}

反思:这里利用了一个调用函数,一个结构体。如果没有忘记这些概念,便不存在理解问题了。

实例172  以行为单位读写文件

问题:从键盘中输入字符串“hello world hello boy”,利用fputs函数见字符串内容输出到磁盘文件中,使用fgets函数从磁盘文件中读取字符串到数组s中,最终将其输出到屏幕上。

逻辑:这里又增添两个函数。

  • fputs函数:

    fputs(字符串,文件指针)

    它的作用是想指定的文件写入一个字符串,其中字符串可以是字符串常量,也可以是字符串数组名、指针或者变量。

  • fgets函数:

    fgets(字符数组名,n,文件指针)

    它的作用从指定的文件中读入一个字符串到字符数组中。n表示所得到的字符串中字符的个数(包含字符串结束符“\0”(表示NULL))。

代码:

 #include <stdio.h>
main()
{
FILE *fp;                   /*定义一个指向FILE类型结构体的指针变量*/
char str[], s[], filename[];   /*定义数组为字符型*/
printf("please input string!\n");
gets(str);                  /*获得字符串*/
printf("please input filename:\n");
scanf("%s", filename);           /*输入文件所在路径及名称*/
if ((fp = fopen(filename, "wb")) != NULL)
                       /*以只写方式打开指定文件*/
{
fputs(str, fp);             /*把字符数组str中的字符串输出到fp指向的文件*/
fclose(fp);
}
else
{
printf("cannot open!");
exit();
}
if ((fp = fopen(filename, "rb")) != NULL)
{
while (fgets(s, sizeof(s), fp))
                     /*从fp所指的文件中读入字符串存入s中*/
printf("%s", s);
                     /*将字符串输出*/ fclose(fp);               /*关闭文件*/
}

反思:区分fgetc、fgets、fputc、fputs的区别。看待这些问题时应当不断更换着自己观察的角度。比如fprintf是将内容显示到屏幕上,其实fprintf只是C语言内的一个来自stdio库函数的封装函数,来实现C的文件对屏幕的输入(代码自行查找)。而那些库函数中的函数也都是通过调用Windows中API函数来实现其功能的。再往底层探去,Windows的API函数也是C语言。其下方的抽象层却由汇编构成。是不是很神奇。

6.2  文件内容操作

实例173  复制文内容到另一个文件

问题:编程实现将一个已存在的文本文档的内容复制到新建的文本文档中。

逻辑:其实前面我们已经实现了从文件到屏幕,从屏幕到文件的操作,那么将两者综合一下,就是这次实例的结果。要注意,读取时,两个文件都应该处在打开的状态。应该在结束时一起关闭。

代码:

 #include <stdio.h>
main()
{
FILE *in,*out;    /*定义两个指向FILE类型结构体的指针变量*/
char ch, infile[], outfile[]; /*定义数组及变量为基本整型*/
printf("Enter the infile name:\n");
scanf("%s", infile);   /*输入将要被复制的文件所在路径及名称*/
printf("Enter the outfile name:\n");
scanf("%s", outfile); /*输入新建的将用于复制的文件所在路径及名称*/
if ((in = fopen(infile, "r")) == NULL) /*以只写方式打开指定文件*/
{
printf("cannot open infile\n");
exit();
}
if ((out = fopen(outfile, "w")) == NULL)
{
printf("cannot open outfile\n");
exit();
}
ch = fgetc(in);
while (ch != EOF)
{
fputc(ch, out);   /*将in指向的文件的内容复制到out所指向的文件中*/
ch = fgetc(in);
}
fclose(in);
fclose(out);
}

实例174  错误处理

问题:编程实现将文件中的制表符换成恰当数量的空格,要求每次读写操作后都调用ferror()函数检查错误。

逻辑:文件在错误处理中的专有函数.

  • ferror函数:

  例子:int ferror(FILE*stream);

  这表示检测文件错误。返回值为0,表示没有出现错误,而非零值表示是有错的。

代码:

 #include <stdio.h>
#include <stdlib.h>
void error(int e)/*自定义error函数判断出错的性质*/
{
if(e == )
printf("input error\n");
else
printf("output error\n");
exit(); /* 跳出程序 */
}
main()
{
FILE *in, *out; /*第一两个文件类型指针in和out*/
int tab, i;
char ch, filename1[], filename2[];
printf("please input the filename1:");
scanf("%s", filename1); /*输入文件路径及名称*/
printf("please input the filename2:");
scanf("%s", filename2); /*输入文件路径及名称*/
if ((in = fopen(filename1, "rb")) == NULL)
{
printf("can not open the file %s。\n", filename1);
exit();
}
if ((out = fopen(filename2, "wb")) == NULL)
{
printf("can not open the file %s。\n", filename2);
exit();
}
tab = ;
ch = fgetc(in); /*从指定的文件中读取字符*/
while (!feof(in))
/*检测是否有读入错误*/
{
if (ferror(in))
error();
if (ch == '\t')
/*如果发现制表符,则输出相同数目的空格符*/
{
for (i = tab; i < ; i++)
{
putc(' ', out);
if (ferror(out))
error();
}
tab = ;
}
else
{
putc(ch, out);
if (ferror(out))
/*检查是否有输出错误*/
error();
tab++;
if (tab == )
tab = ;
if (ch == '\n' || ch == '\r')
tab = ;
}
ch = fgetc(in);
} fclose(in);
fclose(out);
}

反思:头文件中的stdlib.h与stdio.h的区别,具体可以去百度。我的感觉就是初级编程stdio.h够用了,而涉及到系统,比如system.或者exit()等,就需要stdlib.h。但是有的时候就算你不用,编译器也只是会提出警告,但并不影响代码编译,运行。比如这个程序的代码行.9中的“exit(1)”就需要stdlib.h,但是不加,也只是警告,不会报错,导致无法编译、运行。

实例175  合并两个文件信息

问题:有两个内容分别为“hello computer!!”与“This is a c program!!”的文本文档,编程实现合并两个文件的信息。

逻辑:这个问题,你可以将一个文本的内容添加到另一个文本中,也可以将这两个文本添加到一个新建的文本中。这里,我们为了减少操作,采用了前者。

代码:

 #include <stdio.h>
main()
{
char ch, filename1[], filename2[]; /*数组和变量的数据类型为字符型*/
FILE *fp1, *fp2; /*定义两个指向FILE类型结构体的指针变量*/
printf("please input filename1:\n");
scanf("%s", filename1); /*输入文件所在路径及名称*/
if ((fp1 = fopen(filename1, "a+")) == NULL) /*以读写方式打开指定文件*/
{
printf(" cannot open\n");
exit();
}
printf("file1:\n");
ch = fgetc(fp1);
while (ch != EOF)
{
putchar(ch); /*将文件1中的内容输出*/
ch = fgetc(fp1);
}
printf("\nplease input filename2:\n");
scanf("%s", filename2); /*输入文件所在路径及名称*/
if ((fp2 = fopen(filename2, "r")) == NULL) /*以只读方式打开指定文件*/
{
printf("cannot open\n");
exit();
}
printf("file2:\n");
ch = fgetc(fp2);
while (ch != EOF)
{
putchar(ch); /*将文件2中的内容输出*/
ch = fgetc(fp2);
}
fseek(fp2, 0L, ); /*将文件2中的位置指针移到文件开始处*/
ch = fgetc(fp2);
while (!feof(fp2))
{
fputc(ch, fp1); /*将文件2中的内容输出到文件1中*/
ch = fgetc(fp2); /*继续读取文件2中的内容*/
}
fclose(fp1); /*关闭文件1*/
fclose(fp2); /*关闭文件2*/
}

反思:代码行.34中的“fseek(fp2,0L,0)”是个不可缺少的代码。回想一下这篇文章开头,我们提到的文件操作本质。当我们第二个循环执行后,其fp2指向的并不是我们需要的文档开头,这中间我们也没有执行某个代码,使得fp2指向文档开头。所以,我们需要通过fseek函数,来转移指针fp2指向。

实例176  统计文件内容

问题:编程实现对指定文件中的内容进行统计。具体要求:输入要进行统计的文件的路径及名称,统计出该文件中字符、空格、数字及其他字符的个数,并将统计结果存到指定的磁盘文件中。

逻辑:统计问题是个常见问题,这次只是将其与文件操作结合起来而已。

代码:

 #include <stdio.h>
main()
{
FILE *fp1, *fp2; /*定义两个指向FILE类型结构体的指针变量*/
char filename1[], filename2[], ch; /*定义数组及变量为字符型*/
long character, space, other, digit; /*定义变量为长整形*/
character = space = digit = other = ; /*长整形变量的初值均为0*/
printf("Enter file name \n");
scanf("%s", filename1); /*输入要进行统计的文件的路径及名称*/
if ((fp1 = fopen(filename1, "r")) == NULL)
/*以只读方式打开指定文件*/
{
printf("cannot open file\n");
exit();
}
printf("Enter file name for write data:\n");
scanf("%s", filename2); /*输入文件名即将统计结果放到那个文件中*/
if ((fp2 = fopen(filename2, "w")) == NULL) /*以可写方式要存放统计结果的文件*/
{
printf("cannot open file\n");
exit();
}
while ((ch = fgetc(fp1)) != EOF) /*知道文件内容结束处停止while循环*/
if (ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z')
character++; /*当遇到字母时字符个数加1*/
else if (ch == ' ')
space++; /*当遇到空格时空格数加1*/
else if (ch >= '' && ch <= '')
digit++; /*当遇到数字时数字数加1*/
else
other++; /*当是其他字符时其他字符数加1*/
close(fp1); /*关闭fp1指向的文件*/
fprintf(fp2, "character:%ld space:%ld digit:%ld other:%ld\n", character,
space, digit, other); /*将统计结果写入fp指向的磁盘文件中*/
fclose(fp2); /*关闭fp2指向的文件*/
}

反思:开头建立的两个FILE指针,一个指向需要打开的文件,一个指向用来记录结果的文件。代码行.24与.28是有好东西的,两者类似,那么只谈.28吧。代码行.28中的“ch>='0'&&ch<='9'”,其实这里面存在一个隐式转换,将字符转换为ASCII值来进行比较。

总结&反思:至此,C语言有关文件操作部分的基础内容就完毕了。后面还会有一篇,简单提升的文章。说起来,学习文件操作一方面是学习新函数,另一方面是学习其基础流程。至于如何扩展,就看个人了。

C语言范例学习06-上的更多相关文章

  1. C语言范例学习04

    第三章 算法 前言:许多人对算法的看法是截然不同的,我之前提到过了.不过,我要说的还是那句话:算法体现编程思想,编程思想指引算法. 同时,有许多人认为简单算法都太简单了,应当去学习一些更为实用的复杂算 ...

  2. C语言范例学习03-中

    栈和队列 这两者都是重要的数据结构,都是线性结构.它们在日后的软件开发中有着重大作用.后面会有实例讲解. 两者区别和联系,其实总结起来就一句.栈,后进先出:队列,先进先出. 可以将栈与队列的存储空间比 ...

  3. C语言范例学习03-上

    第三章 数据结构 章首:不好意思,这两天要帮家里做一些活儿.而且内容量与操作量也确实大幅提升了.所以写得很慢. 不过,从今天开始.我写的东西,许多都是之前没怎么学的了.所以速度会慢下来,同时写得也会详 ...

  4. C语言范例学习01

    编程语言的能力追求T型. 以前学过C语言,但是只学了理论. 从今天开始,我买了本<C语言程序开发范例宝典>.我要把它通关掉. 这应该可以极大地提升我的编程能力. 第一章 基础知识 这章没太 ...

  5. c语言基础学习06

    =============================================================================涉及到的知识点有:1.C语言库函数.字符输入函 ...

  6. 16.go语言基础学习(上)——2019年12月16日

    2019年12月13日10:35:20 1.介绍 2019年10月31日15:09:03 2.基本语法 2.1 定义变量 2019年10月31日16:12:34 1.函数外必须使用var定义变量 va ...

  7. C语言范例学习03-下

    树与图 3.5 二叉树及其应用 PS:二叉树是最经典的树形结构,适合计算机处理,具有存储方便和操作灵活等特点,而且任何树都可以转换成二叉树. 实例101 二叉树的递归创建 实例102 二叉树的遍历 问 ...

  8. C语言范例学习02

    第二章 指针 算是重点吧,这也是C语言的特色啊,直接访问物理存储. 重点: 指针就是一个存放它指向变量地址的变量,好绕口.   区分*在定义是与引用是的作用.   区分*.&的不同.   指针 ...

  9. go语言程序设计学习笔记-1

    https://www.jb51.net/article/126998.htm go标准库文档https://studygolang.com/pkgdoc 1. 如果想要再本地直接查看go官方文档,可 ...

随机推荐

  1. 【cogs 597】【dp】交错匹配

    597. 交错匹配 ★☆ 输入文件:crossa.in 输出文件:crossa.out 简单对照 时间限制:1 s 内存限制:128 MB [问题描写叙述] 有两行自然数. UP[1..N] . DO ...

  2. ASP.NET Core 返回 Json DateTime 格式

    ASP.NET Core 返回 Json 格式的时候,如果返回数据中有DateTime类型,如何自定义其格式呢?配置如下: services.AddMvc().AddJsonOptions(opt = ...

  3. 《跟我学IDEA》三、实用配置(行号、提示、代码等)

    上一篇博文我们介绍了idea如何配置一个maven,git,tomcat等,这一篇我们来进行一些常用设置,这些也正是idea可爱之处,大大提高了开发的效率. 第一节:idea常用配置显示行数.显示方法 ...

  4. java发送post请求 ,请求数据放到body里

    java利用httpclient发送post请求 ,请求数据放到body里. /** * post请求 ,请求数据放到body里 * * @author lifq * * 2017年3月15日 下午3 ...

  5. 17082 两个有序数序列中找第k小(优先做)

    17082 两个有序数序列中找第k小(优先做) 时间限制:1000MS  内存限制:65535K提交次数:0 通过次数:0 题型: 编程题   语言: G++;GCC;VC Description 已 ...

  6. caffe CuDNN报错问题解决

    解决cudnn问题:Loaded runtime CuDNN library: 5005 (compatibility version 5000) but source was compiled wi ...

  7. discuz管理员登录进入后台管理马上跳转到登录界面

    昨天尝试了一下这个discuz论坛,感觉还可以.今天刚刚用管理员账户进入后台管理,准备改一改界面熟悉一下,过不了10秒钟.老是马上就退出来了.我想起来了,昨天是在阿里云服务器上面直接登录这个管理员账号 ...

  8. Siamese Network理解

    提起siamese network一般都会引用这两篇文章: <Learning a similarity metric discriminatively, with application to ...

  9. 20行JS代码实现贪吃蛇

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Cleaner, more elegant, and harder to recognize (msdn blog)

    It appears that some people interpreted the title of one of my rants from many months ago, "Cle ...