文件: 数据文件 和程序文件
文件指针,当用fopen函数打开一个函数的时候会返回一个指针 指向一个结构体用指针来维护这个结构体;
打开文件: 绝对路径(非常的详细),相对路径(在所创建的代码的文件夹中创建一个文件)
fopen("../../test.txt","r");以只读的方式打开当前文件夹的上一个文件夹 名字叫做 test.txxt
fopen("./"test.txt,"r");以只读的方式打开当前文件夹
../ 上一个文件夹
./ 当前的文件夹
用一个FILE* 类型的变量接收 fopen()函数返回的指针,
如果没有打开那么会返回一个空指针 这里可以用if函数和 strerror(erron)判断是否打开成功
fopen()函数以“”w”写的方式打开后 便要写入到文件用的函数可以是 fputc(char pf)这个函数是将一个字符写入到pf流中去,即前面创建的文件夹(这个函数一次只能写入一个字符)
写完后调用fclose(pf)释放pf所占得内存,然后把pf变成空指针
键盘输入和屏幕输出也是两个流 标准流 stdin和stdout
文本输入流 fgets函数一样的道理,只是要传入3个参数,从哪里获得 大小 和 放到哪里去
puts输出流
格式化输入(fprint)f和输出(fscanf)一样只是要调用流输入到哪里去和从哪里输出
而标准化输入(scanf)和标准化输出(printf)是从键盘中输入,从屏幕中输出;
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
/*文件 程序文件,数据文件
文件指针: 打开文件会返回一个文件指针 FILE* 那么需要一个指针pf接收它
char arr[1024] = {};
写法: 绝对路径(详细地址) 相对路径:当前代码保留的文件夹的路径
.. 表示上一个路径
. 表示当前路径
fopen("../../test.text","r")以只读的方式打开当前代码所处的路径的上一个路径
fopen("./test/text","r")以只读的方式打开当前代码存储的路径的文件*/
/*fopen("test.text", "w");*/
FILE* pf = fopen("test1.txt", "w"); // 以只读的方式打开一个叫做“test.text”的文件,它会返回一个指针,那么便用FILE*定义一个变量去接受它
// 文件以写得方式 如果已存在一个这样文件,就会重新创建一个新的文件将原来的文件覆盖掉
if (pf == NULL) { //当打开失败会返回一个空指针,调用errno去看错误的原因
printf("%s\n", strerror(errno)); //调用函数strerror(errno)查看错误的原因
return 0;
}
fclose(pf); // 将pf指向的结构体内存释放掉
pf = NULL; // 释放掉指针
return 0;
}
int main() {
//写文件
FILE* pywrite=fopen("test.txt", "w");
if (pywrite == NULL) {
printf("%s", strerror(errno));
return 0;
}
// 写文件(字符输入输出)
fputc('b', pywrite); //将字符b写到pywrite这个流里面去
fputc('i', pywrite);
//关闭文件
fclose(pywrite);//释放这个指针所指向的结构体的内存
pywrite = NULL; // 将指针赋为空指针
return 0;
}
// 读文件中的内容 文件流
int main() {
FILE* py = fopen("test.txt", "r");// 以只读的方式打开文件
if (py == NULL) {
// 检验是否找到文件的地址
printf("%s", strerror(errno));
}
// 找到地址
int a=fgetc(py); //得到py指针指向的流,返回的是一个整型,创建一个变量去接受只返回一个数字(字符)
printf("%c", a);
fclose(py);
py = NULL;
}
/*
键盘是标准输入流,屏幕是标准是标准输出流,这两个是一个程序默认流
stdin 从键盘获取数据的流
stdout 从屏幕输出数据的流 都是 FILE* 的类型
sterr
*/
int main() {
int ch = fgetc(stdin); // fgetc能用于所有的字符输入流
fputc(ch, stdout); // 将ch中的内容用屏幕流输出
return 0;
}
int main() {
char buff[1024] = { 0 };
FILE* py = fopen("test.txt", "r");
if (py == NULL) {
printf("%c", strerror(errno));
return 0;
}
//文本行输入输出
fgets(buff, 4, py); // fgets的用法从py中读取4个字节到buff中去
puts(buff); // 输出
fclose(py);
py = NULL;
return 0;
}
printf 标准的输入输出流模式,对屏幕进行输入输出
// fprintf 是所有流的模式 只是要传入一个指针流 可以对文件进行操作
//利用fprintf将数据写入到文件中去
struct s
{
int age;
char arr[5];
float score;
};
int main() {
s S = {0,'a',3.14};
FILE* py = fopen("test2.txt", "w");//以写的方式创建一个文本文件,然后将数据写入到文件中去
if (py == NULL) {
printf("%s", strerror(errno));
}
// 格式化的形式写文件,需要传入流指针
fprintf(py, "%d,%c,%f",S.age,S.arr,S.score);
fclose(py);
// 格式化读 可以从文件中读取数据
fscanf(py, "%d,%c,%f", &(S.age), &(S.arr), &(S.score));
py = NULL;
return 0;
// 这里的流可以对应的是标准输入输出流 stdin 和 stdout
}
define 定义别名常量
tydefine 定义别名变量