当前位置: 首页 > news >正文

网站整体配色方案农村电商平台发展现状

网站整体配色方案,农村电商平台发展现状,南川集团网站建设,网站建设明确细节个人主页#xff08;找往期文章包括但不限于本期文章中不懂的知识点#xff09;#xff1a; 我要学编程(ಥ_ಥ)-CSDN博客 目录 前言 文件的打开和关闭 流和标准流 文件指针 文件的打开和关闭 文件的顺序读写 顺序读写函数介绍 fputc的使用 fgetc的使用 fput…个人主页找往期文章包括但不限于本期文章中不懂的知识点 我要学编程(ಥ_ಥ)-CSDN博客 目录 前言 文件的打开和关闭  流和标准流 文件指针 文件的打开和关闭  文件的顺序读写  顺序读写函数介绍 fputc的使用  fgetc的使用  fputs的使用  fgets的使用  fprintf的使用  fscanf的使用  对比一组函数输入与输出  sprintf的使用  sscanf的使用 fwrite的使用  fread的使用  文件的随机读写 fseek的使用 ftell的使用  rewind的使用  文件读取结束的判定 被错误使用的 feof 文件缓冲区  前言 为什么要使用文件  我们写的程序的数据是存储在电脑的内存中如果没有文件程序退出内存回收数据就丢失 了等再次运行程序是看不到上次程序的数据的如果要将数据进行持久化的保存我们就要使用文件。 什么是文件 磁盘硬盘上的文件是文件。 但是在程序设计中我们一般谈的文件有两种程序文件、数据文件从文件功能的角度来分类的。 程序文件包括源程序文件后缀为.c,目标文件windows环境后缀为.obj,可执行程序windows 环境后缀为.exe。 数据文件的内容不一定是程序而是程序运行时读写的数据比如程序运行需要从中读取数据的文件或者输出内容的文件。 本文讨论的是数据文件。 在以前所处理数据的输入输出都是以终端为对象的即从终端的键盘输入数据运行结果显示到显示器上。 其实有时候我们会把信息输出到磁盘上当需要的时候再从磁盘上把数据读取到内存中使用这里处理的就是磁盘上的文件。 文件名 一个文件要有一个唯一的文件标识以便用户识别和引用。 文件名包含3部分文件路径文件名主干文件后缀 例如 c:\code\test.txt 为了方便起见文件标识常被称为文件名。即一个文件要有一个唯一的文件名。 二进制文件和文本文件 根据数据的组织形式数据文件被称为文本文件或者二进制文件。 数据在内存中以二进制的形式存储如果不加转换的输出到外存与之对应的就是内存的文件中就是二进制文件。 如果要求在外存上以ASCII码的形式存储则需要在存储前转换。以ASCII码字符的形式存储的文件就是文本文件。 一个数据在文件中是怎么存储的呢 字符一律以ASCII码形式存储数值型数据既可以用ASCII码形式存储也可以使用二进制形式存储。 如整数10000如果以ASCII码的形式输出到磁盘则在磁盘中占用5个字节每个字符一个字节1 0 0 0 0 0而以二进制形式输出则在磁盘上只占4个字节一个整数4个字节。 文件的打开和关闭  流和标准流 我们程序的数据需要输出到各种外部设备也需要从外部设备获取数据不同的外部设备的输入输出操作各不相同为了方便程序员对各种设备进行方便的操作我们抽象出了流的概念我们可以把流想象成流淌着字符的河。 C程序针对文件、画面、键盘等的数据输入输出操作都是通过流操作的。 一般情况下我们要想向流里写数据或者从流中读取数据都是要打开流然后操作。 标准流 那为什么我们使用 scanf函数 从键盘输入数据使用 printf函数 向屏幕上输出数据并没有打开流呢 那是因为C语言程序在启动的时候默认打开了3个流 • stdin - 标准输入流在大多数的环境中从键盘输入scanf函数就是从标准输入流中读取数据。 • stdout - 标准输出流大多数的环境中输出至显示器界面printf函数就是将信息输出到标准输出流中。 • stderr - 标准错误流大多数环境中输出到显示器界面。 这是默认打开了这三个流我们使用scanf、printf等函数就可以直接进行输入输出操作的。 stdin、stdout、stderr 三个流的类型是 FILE* 通常称为文件指针。 C语言中就是通过 FILE* 的文件指针来维护流的各种操作的。 文件指针 缓冲文件系统中关键的概念是“文件类型指针”简称“文件指针”。 每个被使用的文件都在内存中开辟了一个相应的文件信息区用来存放文件的相关信息如文件的名字文件状态及文件当前的位置等。这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的取名 FILE。 VS 编译环境提供的 stdio.h 头文件中有以下的文件类型申明  struct _iobuf {char* _ptr;int _cnt;char* _base;int _flag;int _file;int _charbuf;int _bufsiz;char* _tmpfname; }; typedef struct _iobuf FILE; 不同的C编译器的FILE类型包含的内容不完全相同但是大同小异。 每当打开一个文件的时候系统会根据文件的情况自动创建一个FILE结构的变量并填充其中的信息使用者不必关心细节。 一般都是通过一个FILE的指针来维护这个FILE结构的变量这样使用起来更加方便。 FILE* pf;//⽂件指针变量 定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区是一个结构体变量。通过该文件信息区中的信息就能够访问该文件。也就是说通过文件指针变量能够间接找到与它关联的文件。 就比如下面这幅图 文件的打开和关闭  文件在进行读写的操作之前应该先打开文件在使用结束之后应该关闭文件。 在编写程序的时候打开文件的同时都会返回一个FILE*的指针变量指向该文件也相当于建立了指针和文件的关系。 ANSI C标准C 规定使用 fopen 函数来打开文件 fclose 来关闭文件。函数原型如下 //打开⽂件 //filename——文件名 //mode——方式以什么样的方式打开这个文件例如读写…… FILE * fopen ( const char * filename, const char * mode );//关闭⽂件 //stream——就是一个文件指针要被关闭的文件 int fclose ( FILE * stream ); 在介绍这两个函数之前我们还需要学习一个函数 perror 。 这个函数是用来打印错误信息的。这个函数与我们学过的 strerror 函数有关。strerror 函数是把错误码对应的错误信息的地址传给一个char*的指针如果我们再用 printf 打印的话就可以知道其内容了而这个perror就是直接一步到位打印错误信息。 #include stdio.h #include string.h int main() {char* ret strerror(1);printf(%s\n, ret);perror(1);return 0; } 当然这里因为没有错误信息所以它就打印了没有错误。perror 就是会把传进去的参数打印然后在后面加上冒号与空格。注意的是这个参数传进去的时候要加双引号。 现在就来学习fopen 函数。下面这个表格是文件的打开方式分类 文件打开方式含义如果指定文件不存在  r只读为了输入数据打开一个已经存在的文本文件出错w只写为了输出数据打开一个文本文件建立一个新的文件a追加向文本文件末尾添加数据建立一个新的文件rb只读为了输入数据打开一个二进制文件出错wb只写为了输出数据打开一个二进制文件建立一个新的文件ab追加向一个二进制文件末尾添加数据建立一个新的文件r读写为了读和写打开一个文本文件出错w读写为了读和写建立一个新的文件建立一个新的文件a读写打开一个文件在文件末尾进行读写建立一个新的文件rb读写为了读和写打开一个二进制文件出错wb读 写为了读和写新建一个新的二进制文件建立一个新的文件ab读 写打开一个二进制文件在文件末尾进行读和写建立一个新的文件 #include stdio.h int main() {//打开文件FILE* pf fopen(data.txt, r);//打开失败if (pf NULL){perror(fopen);return 1;//打开失败就不需要往后进行了}//打开成功// ……//后续操作return 0; } 注意如果没有写绝对路径的话系统就只会在本文件下寻找就是与这个 .c 文件在同一文件下。绝对路径就是D:\c语言\writing-code-for-blogs\test_3_12\test_3_12 这种。当然为了防止有转义字符的出现就需要加上双斜杠。 #include stdio.h int main() {//打开文件FILE* pf fopen(data.txt, w);//打开失败if (pf NULL){perror(fopen);return 1;//打开失败就不需要往后进行了}//打开成功// ……//后续操作return 0; } 文件的顺序读写  顺序读写函数介绍 函数名功能适用于fgetc字符输入函数所有输入流fputc字符输出函数所有输出流fgets文本行输入函数所有输入流fputs文本行输出函数所有输出流fscanf格式化输入函数所有输入流fprintf格式化输出函数所有输出流fread二进制输入文件fwrite二进制输出文件 上面说的适用于所有输入流一般指适用于标准输入流和其他输入流如文件输入流所有输出流一般指适用于标准输出流和其他输出流如文件输出流。 现在我们就可以往文件里写入一些字符了。 fputc的使用  fputc 就是把字符输出到流中。  #include stdio.h int main() {//打开文件FILE* pf fopen(data.txt, w);//打开失败if (pf NULL){perror(fopen);return 1;//打开失败就不需要往后进行了}//打开成功往其中写入一些字符fputc(a, pf);//关闭文件fclose(pf);pf NULL;return 0; } 如果要写多个就得多次调用这个fputc 函数。 #include stdio.h int main() {//打开文件FILE* pf fopen(data.txt, w);//打开失败if (pf NULL){perror(fopen);return 1;//打开失败就不需要往后进行了}//打开成功往其中写入一些字符for (int i 0; i 26; i){fputc(a i, pf);}//关闭文件fclose(pf);pf NULL;return 0; } 如果我们要打印到屏幕上就写stdout就可以了。 fgetc的使用  这个fgetc就是从所有流中获取字符也就是读取。 #include stdio.h int main() {//打开文件FILE* pf fopen(data.txt, r);//打开失败if (pf NULL){perror(fopen);return 1;//打开失败就不需要往后进行了}//打开成功读取一些字符//读取成功返回字符的ASCll码值读取失败或者遇到文件末尾返回EOFint ret fgetc(pf);printf(%d\n, ret);//关闭文件fclose(pf);pf NULL;return 0; } #include stdio.h int main() {//打开文件FILE* pf fopen(data.txt, r);//打开失败if (pf NULL){perror(fopen);return 1;//打开失败就不需要往后进行了}//打开成功读取一些字符//读取成功返回字符的ASCll码值读取失败或者遇到文件末尾返回EOFint ret fgetc(stdin);printf(%d\n, ret);//关闭文件fclose(pf);pf NULL;return 0; } fputs的使用  fputs与fputc类似。  #include stdio.h int main() {//打开文件FILE* pf fopen(data.txt, w);//打开失败if (pf NULL){perror(fopen);return 1;//打开失败就不需要往后进行了}//打开成功输出一些字符fputs(hello world, pf);fputs(I want learn, pf);//关闭文件fclose(pf);pf NULL;return 0; } fgets的使用  fgets与fgetc就有一些不一样了。 fgets是把从stream中读取的num-1个字符放到str这个字符指针中。 #include stdio.h int main() {//打开文件FILE* pf fopen(data.txt, r);//打开失败if (pf NULL){perror(fopen);return 1;//打开失败就不需要往后进行了}//打开成功输出一些字符char str[10] { 0 };fgets(str, 8, pf);printf(%s\n, str);//关闭文件fclose(pf);pf NULL;return 0; } 当要读取的字符数超过总字符时就会只读取总字符数又或者当读取时遇到\n换行符也会停止本次读取。 #include stdio.h int main() {//打开文件FILE* pf fopen(data.txt, r);//打开失败if (pf NULL){perror(fopen);return 1;}//打开成功输入一些字符char str[10] { 0 };fgets(str, 8, pf);printf(%s, str);fgets(str, 8, pf);printf(%s, str);//关闭文件fclose(pf);pf NULL;return 0; } fprintf的使用  这个fprintf与printf相比就只多了前面那个FILE* stream参数我们就可以模拟printf来实现fprintf函数。   struct S {int i;float f; }; #include stdio.h int main() {//打开文件FILE* pf fopen(data.txt, w);//打开失败if (pf NULL){perror(fopen);return 1;}struct S s { 10, 3.14f };//打开成功输入一些字符//printf(%d %f\n, s.i, s.f);fprintf(pf, %d %f\n, s.i, s.f);//关闭文件fclose(pf);pf NULL;return 0; }可以从结果来看fprintf是把s.i , s.f 按照按照%d %f的格式打印到pf中。  fscanf的使用  这个fscanf与scanf相比就只多了前面那个FILE* stream参数我们就可以模拟scanf来实现fscanf函数。  struct S {int i;float f; }; #include stdio.h int main() {//打开文件FILE* pf fopen(data.txt, r);//打开失败if (pf NULL){perror(fopen);return 1;}struct S s { 0 };//scanf(%d%f, (s.i), (s.f));fscanf(pf, %d%f, (s.i), (s.f));printf(%d %f\n, s.i, s.f);//看看是否读取成功//关闭文件fclose(pf);pf NULL;return 0; }可以从结果来看fscanf是把pf中的数据按照按照%d %f的格式输入到s.i , s.f 中。 对比一组函数输入与输出  scanf ——从标准输入流读取格式化的数据。 printf  ——从标准输出流写格式化的数据。 fscanf——适用于所有输入流的格式化输入函数。 fprintf——适用于所有输出流的格式化输出函数。 sscanf——从字符串中读取格式化的数据 sprintf——将格式化的数据转换成字符串 sprintf的使用  struct S {int i;float f; }; #include stdio.h int main() {//打开文件FILE* pf fopen(data.txt, w);//打开失败if (pf NULL){perror(fopen);return 1;}struct S s { 10 ,3.14f };char arr[20] { 0 };//printf(%d %f\n, s.i, s.f);sprintf(arr, %d %f\n, s.i, s.f);//关闭文件fclose(pf);pf NULL;return 0; } 与printf相比也只是多了一个字符指针参数。 ssprintf也是把s.i, s.f按照%d %f的格式放到arr中。  sscanf的使用 struct S {int i;float f; }; #include stdio.h int main() {//打开文件FILE* pf fopen(data.txt, r);//打开失败if (pf NULL){perror(fopen);return 1;}struct S s { 10 ,3.14f };struct S tmp { 0 };char arr[20] { 0 };sprintf(arr, %d %f\n, s.i, s.f);//scanf(%d%f, (s.i), (s.f));sscanf(arr, %d%f, (tmp.i), (tmp.f));//关闭文件fclose(pf);pf NULL;return 0; }sscanf是把arr中数据按照%d %f的格式放到(tmp.i) , (tmp.f)。 sprintf函数一般是与sscanf函数一起使用。 上面这些函数都是属于文本操作函数操作的是文本文件而接下来我们要学习的是操作二进制文件的函数。 fwrite的使用  上面这个函数的大概意思是写count个大小为size的字节的元素到这个流里stream从ptr所指向的这个内存开始写。  struct S {int i;float f; }; #include stdio.h int main() {//打开文件FILE* pf fopen(data.txt, wb);//打开失败if (pf NULL){perror(fopen);return 1;}struct S s { 10, 3.14f };//从s这个位置开始写写一个大小为sizeof(s)的数据到pf中fwrite(s, sizeof(s), 1, pf);//关闭文件fclose(pf);pf NULL;return 0; }如果要把它看懂的话就得用二进制的方式来读这就需要用到fread函数了。 fread的使用  我们会发现这个和fwrite的参数是一样的。其实这个函数与fwrite的功能刚好相反。它是从流中stream的数据 取出count个大小为size的数据放到ptr所指向的那块空间中。并且当fread会返回一个size_t的值表示读取成功的个数。 #include stdio.h struct S {int i;float f; }; int main() {//打开文件FILE* pf fopen(data.txt, wb);//打开失败if (pf NULL){perror(fopen);return 1;}struct S s1 { 10, 3.14f };//写入数据fwrite(s1, sizeof(s1), 1, pf);fclose(pf);pf fopen(data.txt, rb);struct S s2 { 0 };//从pf中读取一个大小为sizeof(s)的数据放到s指向的那块空间中fread(s2, sizeof(s2), 1, pf);printf(%d %f\n, s2.i, s2.f);//看看是否读取成功//关闭文件fclose(pf);pf NULL;return 0; } 从输出的结果来看这个我们写入与读取的操作都是正确的。  文件的随机读写 fseek的使用 根据文件指针的位置和偏移量来定位文件指针。 我们知道当打开一个文件时文件指针是指向这个文件的起始位置的。如果我们想要读取后面的数据总不能一个一个的往后读取吧太不方便了。因此就提供了一个函数fseek可以让我们从想要的位置开始读取。 参数解析offset——偏移量  origin——从哪里开始读取。给我们提供了三个选择文件的起始位置SEEK_SET文件的末尾SEEK_END文件指针当前指向的位置SEEK_CUR stream——从哪个流开始读取。 #include stdio.h int main() {FILE* pf fopen(data.txt, r);if (pf NULL){perror(fopen);return 1;}//假设我们这个已经在data.txt这个文件中写入abcdefghiint ret fgetc(pf);printf(%c\n, ret);fseek(pf, 5, SEEK_SET);ret fgetc(pf);printf(%c\n, ret);fclose(pf);pf NULL;return 0; } 注意这个偏移量也是由正负之分的。正的文件指针就往右偏负的文件指针就往左偏。 并且我这个SEEK_SET是从文件的起始地址开始的如果是使用SEEK_CUR那么就只要偏移4次就够了因为读取a之后文件指针就指向b去了。 ftell的使用  返回文件指针相对于起始位置的偏移量。 #include stdio.h int main() {FILE* pf fopen(data.txt, r);if (pf NULL){perror(fopen);return 1;}//偏移了次fseek(pf, 5, SEEK_SET);//相较于起始地址偏移量是5int ret ftell(pf);printf(%d\n, ret);fclose(pf);pf NULL;return 0; } rewind的使用  让文件指针的位置回到文件的起始位置 #include stdio.h int main() {FILE* pf fopen(data.txt, r);if (pf NULL){perror(fopen);return 1;}fseek(pf, 5, SEEK_SET);int ret fgetc(pf);printf(%c\n, ret);rewind(pf);ret fgetc(pf);printf(%c\n, ret);fclose(pf);pf NULL;return 0; } 这些文件都是fseek那个代码里的文件也就是这个文件里是:abcdefghi。  文件读取结束的判定 被错误使用的 feof 牢记在文件读取过程中不能用feof函数的返回值直接来判断文件的是否结束。 feof 的作用是当文件读取结束的时候判断读取结束的原因是否是遇到文件尾结束。 1. 文本文件读取是否结束判断返回值是否为 EOF fgetc 或者 NULL fgets 例如 • fgetc 判断是否为 EOF 。 • fgets 判断返回值是否为 NULL 。 2. 二进文件的读取结束判断判断返回值是否小于实际要读的个数。 • fread判断返回值是否小于实际要读的个数。 文本文件 #include stdio.h #include stdlib.h int main() {int c; FILE* fp fopen(test.txt, r);if (!fp)//fpNULL {perror(File opening failed);return EXIT_FAILURE;}//fgetc 当读取失败的时候或者遇到文件结束的时候都会返回EOFwhile ((c fgetc(fp)) ! EOF) {putchar(c);}//判断是什么原因结束的//ferror是用来判断是不是遇到读取错误if (ferror(fp))//读取遇到错误puts(I/O error when reading);else if (feof(fp))//遇到文件末尾puts(End of file reached successfully);fclose(fp);fp NULL;return 0; } 二进制文件 #include stdio.h enum { SIZE 5 }; int main() {double a[SIZE] { 1.0,2.0,3.0,4.0,5.0 };FILE* fp fopen(test.bin, wb); if (fp NULL){perror(fopen);return 1;}//sizeof * a —— sizeof(*a) —— 这个也就是a数组的第一个元素fwrite(a, sizeof * a, SIZE, fp);//写 double 的数组fclose(fp);double b[SIZE];fp fopen(test.bin, rb);size_t ret_code fread(b, sizeof * b, SIZE, fp); // 读 double 的数组if (ret_code SIZE)//全部读取成功{puts(Array read successfully, contents: );for (int n 0; n SIZE; n)printf(%f , b[n]);putchar(\n);}else {if (feof(fp))//读取错误{printf(Error reading test.bin: unexpected end of file\n);}else if (ferror(fp)) //遇到文件末尾{perror(Error reading test.bin);}}fclose(fp);fp NULL;return 0; } 文件缓冲区  ANSI C 标准C标准采用“缓冲文件系统” 处理的数据文件的所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据则从磁盘文件中读取数据输入到内存缓冲区充满缓冲区然后再从缓冲区逐个地将数据送到程序数据区程序变量等。缓冲区的大小根据C编译系统决定的。  #include stdio.h #include windows.h//Sleep函数所需的头文件 int main() {FILE* pf fopen(test.txt, w);if (pf NULL){perror(fopen);return 1;}fputs(abcdef, pf);//先将代码放在输出缓冲区printf(睡眠10秒-已经写数据了打开test.txt文件发现文件没有内容\n);Sleep(10000);//休眠10000毫秒printf(刷新缓冲区\n);fflush(pf);//刷新缓冲区时才将输出缓冲区的数据写到文件磁盘printf(再睡眠10秒-此时再次打开test.txt文件文件有内容了\n);Sleep(10000);fclose(pf);//注fclose在关闭文件的时候也会刷新缓冲区pf NULL;return 0; } 这里可以得出一个结论 因为有缓冲区的存在C语言在操作文件的时候需要做刷新缓冲区或者在文件操作结束的时候关闭文件。 如果不做可能导致读写文件的问题。 好啦本期文件操作的学习到此就结束了下一期我们再一起学习吧
http://www.pierceye.com/news/458236/

相关文章:

  • 网站建设用什么系统华为弹性云做网站
  • 莱芜高端网站建设报价网站色彩策划
  • 房地产项目网站做网站互联网公司有哪些
  • 凡科做网站友情链接怎么做wordpress广告位设置
  • org已经备案的网站wap网站建设服务
  • 企业网站模板免费下载企业网站模板免费完整版的网站模板
  • 外贸网站建设公司价格怎样做触屏版手机网站
  • 南宁站建好就够用秦皇岛微信推广平台
  • 物流公司做网站有用吗河北省住房和城乡建设网站
  • 网站举报官网seo站长论坛
  • 建站工具有哪些论坛网站建设总体要求
  • 公司网页网站建设 pptwordpress php 采集
  • 遵义网站开发公司舟山网站建设企业
  • 外贸网站一站式服务招网站建设销售
  • 绚丽的网站wordpress进入后台显示500
  • 威海城乡与住房建设部网站小颜自助建站系统
  • 域名怎么解析到网站做响应式网站需要学哪些知识
  • wordpress手机端慢seoer是什么意思
  • wordpress添加站点江苏廉政建设网站
  • 网站seo是什么做二维码推送网站
  • win7 iis默认网站设置游戏推广员
  • 湖北二师网站建设排名潍坊专业捞泵电话
  • 个人网站设计内容和要求萍乡网站制作公司
  • 合肥网站seo费用怎么把文章导入wordpress
  • 赣州网站推广哪家最专业阿里云wordpress数据库备份
  • 珠海专业网站建设公司做网站虚拟主机好还是
  • 做美图 网站有哪些wordpress哪些插件
  • 倒计时网站模板全屋定制设计培训学校哪里有
  • 凡客做网站网站排名的重要性
  • 怎么问客户做不做网站企业网站源码 多语言