C语言【文件操作】

打印 上一主题 下一主题

主题 975|帖子 975|积分 2925

C语言【文件操作】

1、输入/输出流的定义。

​        C语言中,文件输入/输出以流的方式进行。
​        读还是写,输入还是输出,是站在内存(程序)的角度来看的。从程序(内存)向 数据源(如文件、网络等)传递数据的过程叫做数据,读数据使用的路径叫做输入流,一般读数据的过程是一个解码的过程;从数据源(如文件、网络等)向 内存(程序)传递数据的过程叫做数据,写数据使用的路径叫做输出流,一般写数据的过程是一个编码的过程。
​        编码和解码使用的字符集不一致时会出现乱码。
2、标准输入输出(一般指从键盘输入,从控制台输出)
  1. scanf(...) 和 printf(...) 略
复制代码
  1. // getchar 用于从标准输入流(通常是键盘)读取一个字符。以下是其函数定义:
  2. int getchar(void);        // 返回一个数值(读取的字符的ASCII码),用变量接收处理
  3. // putchar 用于将一个字符写入到标准输出流(通常是控制台)。以下是其函数定义:
  4. int putchar(int character);        // 返回一个整数值(写入字符的ASCII码)。参数为写入字符。
复制代码
  1. // gets 用于从标准输入流读取一个字符串。
  2. char *gets(char *str);        // 返回值和参数都是读取到的那个字符串。
  3. // puts 用于将参数输出到控制台。
  4. int puts(const char *str);        // 返回成功输出的字符个数。参数为要输出的字符串。
复制代码
  1. // 有些函数主要作用是操作文件的(比如从文件中读数据),改变一下参数,也可成为标准输入输出(比如从控制台中拿数据),比如下面这个函数:
  2. fgets(指针, 长度, stdin);        // 第一个参数存数据,长度,stdin指定为操作对象为控制台。
复制代码
3、文件读写

​        以下的文件操作函数都在中
  1. /**
  2. *                打开文件
  3. *        返回一个操作文件的指针。       
  4. *        第一个参数为要操作的文件路径及文件名。
  5. *                相对路径和绝对路径知识略。win路径分隔符为/或\\(转义),Unix为/,当前目录下可以加./也可不加。
  6. *        第二个参数为模式。如"r" ----- 这个模式是个字符串。
  7. *                r只读。w清空原文件并写入。a追加。b二进制。+为省略r和w。(b和+不能单独使用)
  8. *                组合有:rb、wb、ab、r+、w+、a+、rb+、r+b、wb+、w+b、ab+、a+b
  9. *                r/r+不创建新文件,文件不存在时不能正确读取; 写文件时,如果目录不存在则报错
  10. *                使用w时,未关闭流继续写则为追加。
  11. */
  12. FILE *fopen(const char *filename, const char *mode);       
复制代码
  1. /*
  2.         写文件
  3. */
  4. // 第一种。一次写一个字符。
  5. int fputc(int character, FILE *stream);        // 成功返回写入字符的ASCII码;失败返回EOF,即-1
  6. // 第二种。写入字符串。第一个参数为要写入的字符串;第二个参数为文件指针。
  7. int fputs(const char *str, FILE *stream); // 成功返回写入的字符个数;失败返回EOF,即-1
  8. // 第三种。第一个参数为文件指针;第二个参数为带占位符的字符串;...为可变参。
  9. int fprintf(FILE *stream, const char *format, ...);        //成功返回写入字符个数;失败返回EOF,即-1
复制代码
  1. /*
  2.         读文件
  3. */
  4. // 第一种。读一个字符。
  5. int fgetc(FILE *stream);        // 返回读取字符的ASCII码。失败返回EOF,即-1
  6. // 第二种。读一个字符串。之前介绍过它的读取控制台的数据。第二个参数为个数;第三个参数为文件指针或指定控制台读
  7. char *fgets(char *str, int num, FILE *stream);        // 返回值和第一个参数都是读取到的字符串。失败返回NULL。
  8. // 第三种。
  9. int fscanf(FILE *stream, const char *format, ...);
  10. fscanf(file, "%s %s %d", msg1, msg2, &num);        // 读取到后面的变量中。占位符之间的空格表示文件中的空格或换行。
复制代码

  1. union {
  2.     int a;
  3.     int b;
  4. } *p, u;
  5. p = &u;        // 对于自定义数据类型来说,下面要使用指针时,必须这样指向一下。
复制代码
  1. const int *p;        // p可改变指向,*p不可改变
  2. int const *p;        // p可改变指向,*p不可改变
  3. int * const p;        // p不可改变指向,*p可改变
  4. cosnt int * const p;        // p不可改变指向,*p也不可改变
  5. // 简单来说,p前的const把p给锁定了,*前的const把*p给锁定了,都有则都锁定。
  6. // int 和 const 紧挨着时,他俩可以交换位置。
复制代码
​        在vscode中,让编译出的可执行文件在控制台输出且编码方式改为GBK编码的方式为:task.json文件中的args属性中添加:"-fexec-charset=gbk";在lauch.json文件中修改"configurations"属性第一个数组的“externalconsole”属性改为true。
​        getchar()会吃掉'\n',他就相当于scanf("%c", 变量);  所以有时需要使用两个getchar()才可以使控制台输入完后停留。
​        scanf("%d\n", 变量);  它不吃回车或换行是因为它不是%c。如果它在getchar()前,它前面如果还有输入,输入中如果按了回车它也不吃,它后面的getchar()也吃不掉,回车就被消耗掉了。
  1. #include<stdlib.h>
  2. int main(){
  3.     system("这里面可以填写cmd的命令");
  4.     return 0;
  5. }
复制代码
case中的break是跳出switch;if中的break是跳出这层循环。
注意下面代码中的知识点
  1. char *p = "hello";         // 这个hello是个字面量,不可更改
  2. *(p+2) = 'a';           //报错
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表