本篇文章并没有介绍怎么进行文件操作,本篇文章主要是帮助理解文件操作,这是我个人的理解,希望大家能得到帮助
1.我们首先要了解流的概念
我们可以这样理解流,比如我们写scanf("%d", &a)这个代码时,当执行这个代码事,scanf函数会从键盘读取我们输入的值,然后赋值给a,这个读取值,然后再赋值的过程中就用到了流。在这里,scanf其实用的是stdin(标准输入流),然后我们在键盘输入。
2.文件操作时的流
当我们在进行文件操作时,我们用到的流可能不止stdin这样的标准输入流。
例如:如果我们想实现scanf ("%d", &a)这个函数的功能(给a赋个整型值),我们难道只能从键盘上读取数据吗?难道我们不能创建一个文件,然后我们先在文件中写入我们想要赋给a的值,然后我们对文件进行读取,把文件中的值赋给a?这种方法当然可以,这就是文件操作时的流的运用,,我们可以从上面两个例子中跟好的理解流。
3.区分fgetc和fputc以及fprintf和fscanf
当我们进行文件操作时我们要用到
1.我们打开文件的模式
2.对文件的操作函数
文件操作类的函数调用,都要包含头文件#include <stdio.h>,下面为了偷懒,我给省略了,但是代码要正确运行必须包含头文件#include <stdio.h>
这里我们来区别fgetc和fputc
fgetc:get意思是得到,然后他要从哪里得到呢?所以这时就要输入流,可以是stdin这样的标准输入流,还可以是FILE*fp这样的文件输入流。所以fgetc就是get点东西,然后可以从多种输入流get。fgets也可以这样理解。
fgetc运用
#include <stdio.h>
int main()
{
int a = fgetc(stdin);
printf("%c", a);
return 0;
}
fputc:put的意思是放,那他要放哪呢,放在屏幕上?放在文件里面?都可以,只要fputc配合输出流使用就可以了。所以fputc就是put些东西,然后可以put在多种输出流上。fputs也可以这样理解。
fputc运用
int main()
{
fputc('C', stdout);
return 0;
}
区别fprintf和fscanf
fprintf:fprintf中的printf函数是答应东西到屏幕上,那fprintf就可以理解为打印东西到一个输出流上,可以是stdout标准输出流(屏幕),也可以打印到文件里,就相当于向文件内写内容。
int main()
{
//打开文件
FILE* fp = fopen("text.txt", "w");
if (fp == NULL)
{
perror("fopen");
return 1;
}
//写入
fprintf(fp, "hello world!");
//关闭文件
fclose(fp);
fp = NULL;
return 0;
}
fscanf:fscanf中有scanf函数,scanf函数是从键盘接收内容,然后再进行其他的操作,那么fscanf函数就是从各种输入流中接收数据,然后再进行其他的操作。
例子:
int main()
{
//打开文件
FILE* fp = fopen("text.txt", "w+");
if (fp == NULL)
{
perror("fopen");
return 1;
}
//写入到文件
fprintf(fp, "%d", 7);
//将文件光标返回起始位置
rewind(fp);
//从文件中拿数据
int a = 0;
fscanf(fp, "%d", &a);
printf("%d", a);
//关闭文件
fclose(fp);
fp = NULL;
return 0;
}
总结:
文件操作时,在对应的操作模式,对应函数的使用时,流参与很大的作用。