文章目录
- 一、输入输出流是什么?
- .输入流:
- 2.输出流:
- 二、C语言中常用的输入输出流
- 1.gerchar()与putchar()
- 2.gets()与puts()
- 3.scanf与print()
- 三、文件的创建/打开与关闭
- 1.fopen函数
- 2.fclose函数
- 四、文件IO操作
- 1.fputc与fgetc
- 2.fputs与fgets
- 3.fscanf与fprintf
- 4.fwrite与fread
一、输入输出流是什么?
1.输入流:
输入流就是数据从数据源(文件,键盘)中到c程序的内存中的传输路径。
2.输出流:
输出流就是数据从c程序的内存中到数据源(文件,显示屏)的传输路径。
图示:
二、C语言中常用的输入输出流
1.gerchar()与putchar()
1.getchar
函数:int getchar(ASCII值或者单个字符);
功能:从键盘输入单个字符或字符的ASCII码值,将该值以整数的形式返回。
2.putchar函数
函数原型:int putchar(ASCII值或字符);
功能:将你传入的ASCII值或字符输出
返回一个整数值
#include<stdio.h>
int main(){
printf("请你输入一个字符\n");
int n = getchar();
printf("%d,%c\n", n, n);
printf("=======================\n");
int c1 = putchar('c');
printf("\n");
int c2 = putchar(100);
printf("\n");
printf("%c,%d\n",c1,c2);
}
运行结果:
2.gets()与puts()
1.gets函数:
函数原型:char *gets(char *buf)
功能:从键盘输入字符串将字符串输入字符数组buf中返回一个指向buf的指针
2.puts函数
函数原型:int puts(char *buf);
功能:将buf中的内容输出出来会自动换行,返回一个非负整数,失败返回EOF
#include<stdio.h>
int main(){
printf("请你输入一个字符串\n");
char buf[100];
char *p = gets(buf);
int m = puts(buf);//输出buf内容
puts(p);//输出p指针指向的内容
printf("%d\n",m);
}
运行结果:
3.scanf与print()
三、文件的创建/打开与关闭
1.fopen函数
fopen()函数:功能打开或创建文件
函数原型:FILE *fopen(FILE*fileName,const char*mode);
参数FILE*fileName:文件名
参数const char*mode:文件的打开方式
文件的打开方式 r(只读方式打开文件)
w(只写的方式打开文件,从头写入,若文件不存在就先创建在写入,若文件存在就先清空在入)。
a(以追加的方式打开文件,文件存在就追加内容写入,不存在就先创建再写入,a只有写入权限)。
r+(以可读写的方式打开文件)
w+(以可读写的方式打开文件,其余的功能与w相同)
a+(以追加的方式打开文件,具有读写权限,其余功能与a相同)
rb(以只读的方式打开二进制文件)
wb(以只写的方式打开二进制文件,其余功能与w相同)
ab(已追加的方式打开二进制文件,其余功能与a相同)
rb+(以读写的方式打开二进制文件)
wb+(以读写的方式打开二进制文件,其余功能与w+相同)
ab+(已追加的方式打开二进制文件,其余功能与a+相同)
返回值:FILE类型的指针,就代表你打开或创建的文件。
2.fclose函数
fclose()函数:功能关闭并释放文件
int fclose(FILE*fileName);
参数:文件名
返回值成功返回0或一个整数,失败返回EOF
#include<stdio.h>
int main(){
FILE *file = fopen("./fopen.txt","w+");
if(file == NULL){
perror("文件打开或操作失败\n");
return 0;
}
printf("文件打开或创建成功\n");
fclose(file);
}
运行结果:
四、文件IO操作
注意:所有的文件操作都需要先打开文件然后才能进行文件IO操作
1.fputc与fgetc
1.fputc:功能将一个字符读入文件中
int fputc(int character,FILE*stream);
FILE*stream:要写入的文件
int character:要写入的字符或字符的ASCII
返回值:character
2.fgetc:功能将文件中字符一个一个的读取
int fgetc(FILE*stream);
FILE*stream:要写入的文件
返回值:读取字符或其ASCII码值
代码:使用fputc向a.txt文件中写入单个字符
#include<stdio.h>
int main(){
FILE *file = fopen("./a.txt","r+");
int a = fputc('a',file);
printf("%c\n",a);
close(file);
}
运行结果:
a.txt文件
代码案例:从a.txt文件中获取单个字符
#include<stdio.h>
int main(){
FILE *file = fopen("./a.txt","r+");
int b = fgetc(file);
printf("%c\n",b);
fclose(file);
}
运行结果:
2.fputs与fgets
1.fputs:功能向文件中写入字符串
int fputs(const char * buf,FILE *stream)
const char * buf:将要写入的字符串
FIlE *stream:写入的文件
返回值:成功返回一个非负数,失败返回EOF
2.fgets:功能将文件中读取内容指定字符串中
char *fgets(char * buf,int number,FILE *stream);
char *buf:装载读取内容的字符数组
int number:读取字符的个数,个数为有效字符个数加上'\0'
FILE *stream:被读取的文件
返回值:指向buf的指针
代码案例:使用fputs函数向a.txt文件中写入buf字符串的内容
#include<stdio.h>
#include<string.h>
int main(){
FILE *file = fopen("./a.txt","r+");
char buf[] = "apple";
int n = fputs(buf,file);
printf("n=%d\n",n);
}
运行结果:
a.txt文件:
代码案例:从问价a.txt中读取数据到buf2中并打印出来
#include<stdio.h>
#include<string.h>
int main(){
FILE *file = fopen("./a.txt","r+");
char buf2[100];
char * s = fgets(buf2,10,file);
printf("s=%s,buf2=%s\n",s,buf2);
}
运行结果:
3.fscanf与fprintf
1.fprintf():向文件中以printf方式写入数据
int fprintf(FILE *file,const char *format,....)
FILE *file:要写入的文件
const char *format与....:写入的格式,与你使用printf输出的格式一样
你可以在第二个参数里加上输出格式控制符,%d,%f...,再在最后一个参数中
写入对应的变量与数值。
返回值:与printf返回值一样,返回你功能写入字符的个数
失败返回EOF
1.fscanf():以scanf的方式在文件中读取数据使用空白字符(空格、制表符、换行符等)分隔
内容赋值给不同的变量
int fscanf(FILE *file,const char *format,......);
FILE *file:要读取的文件
char *format与......:写入的格式,与你使用scanf输出的格式一样
你可以在第二个参数里加上输出格式控制符,%d,%f...,再在最后一个参数中
写入对应的变量与数值。
返回值:与scanf返回值一样,返回你功能读取文件的格式控制符的个数
失败返回EOF
代码案例:使用fprintf向文件a.txt中输入数据
#include<stdio.h>
int main(){
FILE *file = fopen("./a.txt","r+");
int n = fprintf(file,"aaa%d",10);
printf("n=%d\n",n);
}
运行结果:
a.txt文件:
代码案例:使用fscanf函数将a.txt文件中的内容读取出来
#include<stdio.h>
int main(){
char s1[100];
int num;
int m = fscanf(file,"%s%d",s1,&num);
printf("m=%d,s1=%s,num=%d\n",m,s1,num);
}
运行结果:
4.fwrite与fread
1.fwrite():功能:将字符数组中的内容写入文件中
size_t fwrite(char *buf,size_t size,size_t numher,FILE *stream);
char *buf,写入文件的字符数组
size_t size,单个数据项的大小
size_t numher 数据项的个数
FILE *stream 要写入的文件
返回值 写入文件的数据项的个数
2.fread():功能:将文件中的内容写入字符数组中
size_t fread(char *buf,size_t size,size_t numher,FILE *stream);
char *buf,接受文件内容的字符数组
size_t size,单个数据项的大小
size_t numher 数据项的个数
FILE *stream 被读取的文件
返回值 读取文件数据项的个数
代码案例:使用fwrite函数将字符数组中的内容写入数据中
#include<stdio.h>
#include<string.h>
int main(){
FILE *file = fopen("./a.txt","r+");
char buf[] = "aaaabbbbssss";
int n = fwrite(buf,strlen(buf),1,file);
printf("n=%d\n",n);
}
运行结果:
a.txt文件:
案例代码:使用fread将a.txt文件中的中全部的内容读取到字符数组中打印出来
#include<string.h>
int main(){
FILE *file = fopen("./a.txt","r+");
char buf2[100];
fread(buf2,12,1,file);
printf("%s\n",buf2);
}
运行结果: