勿忘初心做自己 发表于 2024-1-12 13:34:21

C语言【文件操作】

C语言【文件操作】

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

​        C语言中,文件输入/输出以流的方式进行。
​        读还是写,输入还是输出,是站在内存(程序)的角度来看的。从程序(内存)向 数据源(如文件、网络等)传递数据的过程叫做读数据,读数据使用的路径叫做输入流,一般读数据的过程是一个解码的过程;从数据源(如文件、网络等)向 内存(程序)传递数据的过程叫做写数据,写数据使用的路径叫做输出流,一般写数据的过程是一个编码的过程。
​        编码和解码使用的字符集不一致时会出现乱码。
2、标准输入输出(一般指从键盘输入,从控制台输出)

scanf(...) 和 printf(...) 略// getchar 用于从标准输入流(通常是键盘)读取一个字符。以下是其函数定义:
int getchar(void);        // 返回一个数值(读取的字符的ASCII码),用变量接收处理

// putchar 用于将一个字符写入到标准输出流(通常是控制台)。以下是其函数定义:
int putchar(int character);        // 返回一个整数值(写入字符的ASCII码)。参数为写入字符。// gets 用于从标准输入流读取一个字符串。
char *gets(char *str);        // 返回值和参数都是读取到的那个字符串。

// puts 用于将参数输出到控制台。
int puts(const char *str);        // 返回成功输出的字符个数。参数为要输出的字符串。// 有些函数主要作用是操作文件的(比如从文件中读数据),改变一下参数,也可成为标准输入输出(比如从控制台中拿数据),比如下面这个函数:
fgets(指针, 长度, stdin);        // 第一个参数存数据,长度,stdin指定为操作对象为控制台。3、文件读写

​        以下的文件操作函数都在中
/**
*                打开文件
*        返回一个操作文件的指针。       
*        第一个参数为要操作的文件路径及文件名。
*                相对路径和绝对路径知识略。win路径分隔符为/或\\(转义),Unix为/,当前目录下可以加./也可不加。
*        第二个参数为模式。如"r" ----- 这个模式是个字符串。
*                r只读。w清空原文件并写入。a追加。b二进制。+为省略r和w。(b和+不能单独使用)
*                组合有:rb、wb、ab、r+、w+、a+、rb+、r+b、wb+、w+b、ab+、a+b
*                r/r+不创建新文件,文件不存在时不能正确读取; 写文件时,如果目录不存在则报错
*                使用w时,未关闭流继续写则为追加。
*/
FILE *fopen(const char *filename, const char *mode);        /*
        写文件
*/

// 第一种。一次写一个字符。
int fputc(int character, FILE *stream);        // 成功返回写入字符的ASCII码;失败返回EOF,即-1

// 第二种。写入字符串。第一个参数为要写入的字符串;第二个参数为文件指针。
int fputs(const char *str, FILE *stream); // 成功返回写入的字符个数;失败返回EOF,即-1

// 第三种。第一个参数为文件指针;第二个参数为带占位符的字符串;...为可变参。
int fprintf(FILE *stream, const char *format, ...);        //成功返回写入字符个数;失败返回EOF,即-1/*
        读文件
*/

// 第一种。读一个字符。
int fgetc(FILE *stream);        // 返回读取字符的ASCII码。失败返回EOF,即-1
// 第二种。读一个字符串。之前介绍过它的读取控制台的数据。第二个参数为个数;第三个参数为文件指针或指定控制台读
char *fgets(char *str, int num, FILE *stream);        // 返回值和第一个参数都是读取到的字符串。失败返回NULL。
// 第三种。
int fscanf(FILE *stream, const char *format, ...);
fscanf(file, "%s %s %d", msg1, msg2, &num);        // 读取到后面的变量中。占位符之间的空格表示文件中的空格或换行。补

union {
    int a;
    int b;
} *p, u;
p = &u;        // 对于自定义数据类型来说,下面要使用指针时,必须这样指向一下。const int *p;        // p可改变指向,*p不可改变
int const *p;        // p可改变指向,*p不可改变
int * const p;        // p不可改变指向,*p可改变
cosnt int * const p;        // p不可改变指向,*p也不可改变
// 简单来说,p前的const把p给锁定了,*前的const把*p给锁定了,都有则都锁定。
// 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()也吃不掉,回车就被消耗掉了。
#include<stdlib.h>

int main(){
    system("这里面可以填写cmd的命令");
    return 0;
}case中的break是跳出switch;if中的break是跳出这层循环。
注意下面代码中的知识点
char *p = "hello";       // 这个hello是个字面量,不可更改
*(p+2) = 'a';           //报错
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: C语言【文件操作】