文章目录
基本介绍
文件,对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的 word 文档,txt 文件,excel 文 件…都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声音…
文件在程序中是以流的形式来操作的。
1)流:数据在数据源(文件)和程序(内存)之间经历的路径
2)输入流:数据从数据源(文件)到程序(内存)的路径
3)输出流:数据从程序(内存)到数据源(文件)的路径
相关函数在 stdio.h
C 标准库 - stdio .h 该头文件定义了三个变量类型、一些宏和各种函数来执行输入和输出, 在开发过程中,可以来查询
C 输入 & 输出
1)当我们提到输入时,这意味着要向程序写入一些数据。输入可以是以文件的形式或从命令行中进行。C 语言提 供了一系列内置的函数来读取给定的输入,并根据需要写入到程序中。
2)当我们提到输出时,这意味着要在屏幕上、打印机上或任意文件中显示一些数据。C 语言提供了一系列内置的 函数来输出数据到计算机屏幕上和保存数据到文本文件或二进制文件中
标准文件
1)C 语言把所有的设备都当作文件。所以设备(比如显示器)被处理的方式与文件相同。以下三个文件会在程序 执行时自动打开,以便访问键盘和屏幕
2)文件指针是访问文件的方式,我们会讲解如何从屏幕读取值以及如何把结果输出到屏幕上。
3)C 语言中的 I/O (输入/输出) 通常使用 printf() 和 scanf() 两个函数。scanf() 函数用于从标准输入(键盘)读 取并格式化, printf() 函数发送格式化输出到标准输出(屏幕)
4)案例演示, 将内容输出到屏幕
#include <stdio.h>
// 执行 printf() 函数需要该库
int main() {
printf("hello"); //显示引号中的内容
return 0;
}
getchar() & putchar() 函数
1)int getchar(void) 函数从屏幕读取下一个可用的字符,并把它返回为一个整数。这个函数在同一个时间内只会读 取一个单一的字符。您可以在循环内使用这个方法,以便从屏幕上读取多个字符。
2)int putchar(int c) 函数把字符输出到屏幕上,并返回相同的字符。这个函数在同一个时间内只会输出一个单一的字符。您可以在循环内使用这个方法,以便在屏幕上输出多个字符
3)应用实例:程序会读取一个单一的字符
#include <stdio.h>
int main() {
int c;
printf( "Enter a value :");
c = getchar( );
printf( "\nYou entered: ");
putchar( c );
printf( "\n");
return 0;
}
gets() & puts() 函数
1)char *gets(char *s) 函数从 stdin 读取一行到 s 所指向的缓冲区,直到一个终止符或 EOF。
2)int puts(const char *s) 函数把字符串 s 和一个尾随的换行符写入到 stdout。
3)应用实例: 程序读取一整行直到该行结束
#include <stdio.h>
int main() {
char str[100];
printf( "Enter a value :");
gets( str );
printf( "\nYou entered: ");
puts( str );
return 0;
}
scanf() 和 printf() 函数
1)int scanf(const char *format, …) 函数从标准输入流 stdin 读取输入,并根据提供的 format 来浏览输入。
2)int printf(const char *format, …) 函数把输出写入到标准输出流 stdout ,并根据提供的格式产生输出。
3)format 可以是一个简单的常量字符串,但是您可以分别指定 %s、%d、%c、%f 等来输出或读取字符串、整数、 字符或浮点数。还有许多其他可用的格式选项,可以根据需要使用。如需了解完整的细节,可以查看这些函数 的参考手册。现在让我们通过下面这个简单的实例来加深理解
4)应用实例:您输入一个文本并按下回车键时,程序读取输入, 但是要求格式要匹配
#include <stdio.h>
int main() {
char str[100];
int i;
printf( "Enter a value :");
scanf("%s %d", str, &i);
printf( "\nYou entered: %s %d ", str, i);
printf("\n");
return 0;
}
C 文件读写
1)C 语言处理的标准输入和输出设备。创建、打开、关闭文本文件或二进制文件。
2)一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数, 也提供了底层(OS)调用来处理存储设备上的文件。
打开文件
使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象, 类型 FILE 包含了所有用来控制流的必要的信息。下面是这个函数调用的原型: FILE *fopen( const char * filename, const char * mode );
1) 说明:在这里,filename 是字符串,用来命名文件,访问模式 mode 的值可以是下列值中的一个
2)如果处理的是二进制文件(图片,视频…),则需使用下面的访问模式: “rb”, “wb”, “ab”, “rb+”, “r+b”, “wb+”, “w+b”, “ab+”, “a+b” //b :binary 二进制
3)函数的说明
注意:用w或者w+打开文件,文件的内容会全部消失。
关闭文件
关闭文件,使用 fclose( ) 函数。函数的原型如下: int fclose( FILE *fp );
1) 如果成功关闭文件,fclose( ) 函数返回零,如果关闭文件时发生错误,函数返回 EOF。这个函数实际上,会清 空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。EOF 是一个定义在头文件 stdio.h 中的常量。
2)C 标准库提供了各种函数来按字符或者以固定长度字符串的形式读写文件。
3)使用完文件后(读,写),一定要将该文件关闭
写入文件
下面是把字符写入到流中的函数 int fputc( int c, FILE *fp );
说明:函数 fputc() 把参数 c 的字符值写入到 fp 所指向的输出流中。如果写入成功,它会返回写入的字符, 如果发生错误,则会返回 EOF。您可以使用下面的函数来把一个以 null 结尾的字符串写入到流中:
int fputs( const char *s, FILE *fp );
说明:函数 fputs() 把字符串 s 写入到 fp 所指向的输出流中。如果写入成功,它会返回一个非负值,如果发生 错误,则会返回 EOF。您也可以使用 int fprintf(FILE *fp,const char *format, …) 函数来写把一个字符串写入到文件中
代码演示
#include <stdio.h>
void main() {
//创建一个文件指针
FILE *fp = NULL;
//打开该文件
fp = fopen("d:/test100.txt", "w+"); //w+ 模式是 文件会被截断为零长度
//fp = fopen("d:/test100.txt", "a+"); //
//将内容写入到文件中
fprintf(fp, "你好 北京~~\n");
fputs("你好,上海~~\n", fp);
//关闭文件!!!
fclose(fp);
printf("创建, 写入信息完成");
}
读取文件
下面是从文件读取单个字符的函数 int fgetc( FILE * fp );
说明:fgetc() 函数从 fp 所指向的输入文件中读取一个字符。返回值是读取的字符,如果发生错误则返回 EOF。
下面的函数从流中读取一个字符串: char *fgets( char *buf, int n, FILE *fp );
1)说明:函数 fgets() 从 fp 所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓冲区 buf,并在 最后追加一个 null 字符来终止字符串。 如果这个函数在读取最后一个字符之前就遇到一个换行符 ‘\n’ 或文件的末尾 EOF,则只会返回读取到的字符, 包括换行符。
2)也可以使用 int fscanf(FILE *fp, const char *format, …) 函数来从文件中读取字符串,但是在遇到第一个空格字符 时,它会停止读取。
3)代码演示
#include <stdio.h>
void main() {
//创建一个文件指针
FILE *fp = NULL;
//定义一个缓冲区
char buff[1024];
//打开文件
fp = fopen("d:/test200.txt", "r");
//方法 1
//fscanf(fp, "%s", buff);
//输出
//printf("%s\n", buff);
//方法 2 读取整个文件
//说明,循环读取 fp 指向的文件内容,如果读到 NULL,就结束
while(fgets(buff, 1024,fp)!=NULL) {
printf("%s", buff);
}
//关闭文件
fclose(fp);
getchar();
}