您好,登录后才能下订单哦!
在C语言中,文件操作是非常重要的一部分。文件操作允许程序从文件中读取数据或将数据写入文件。文件操作可以分为顺序读写和随机读写两种方式。本文将详细介绍C语言中用于顺序读写的函数,并通过示例代码展示如何使用这些函数。
在C语言中,文件操作通常涉及以下几个步骤:
fopen()
函数打开文件,并返回一个指向文件的指针。fclose()
函数关闭文件,释放资源。在C语言中,文件操作是通过文件指针来进行的。文件指针是一个指向FILE
结构体的指针,FILE
结构体包含了文件的相关信息,如文件的位置、缓冲区等。
FILE *fp;
使用fopen()
函数打开文件,其原型如下:
FILE *fopen(const char *filename, const char *mode);
filename
:要打开的文件名。mode
:打开文件的模式,常见的模式有:
"r"
:只读模式,文件必须存在。"w"
:只写模式,如果文件存在则清空文件,如果文件不存在则创建文件。"a"
:追加模式,如果文件存在则在文件末尾追加数据,如果文件不存在则创建文件。"r+"
:读写模式,文件必须存在。"w+"
:读写模式,如果文件存在则清空文件,如果文件不存在则创建文件。"a+"
:读写模式,如果文件存在则在文件末尾追加数据,如果文件不存在则创建文件。使用fclose()
函数关闭文件,其原型如下:
int fclose(FILE *stream);
stream
:要关闭的文件指针。顺序读写是指按照文件中数据的顺序依次读取或写入数据。C语言提供了多个函数用于顺序读写文件,下面将详细介绍这些函数。
fgetc()
和 fputc()
fgetc()
fgetc()
函数用于从文件中读取一个字符,其原型如下:
int fgetc(FILE *stream);
stream
:要读取的文件指针。EOF
。fputc()
fputc()
函数用于向文件中写入一个字符,其原型如下:
int fputc(int c, FILE *stream);
c
:要写入的字符。stream
:要写入的文件指针。EOF
。#include <stdio.h>
int main() {
FILE *fp;
char ch;
// 打开文件
fp = fopen("test.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
// 写入字符
fputc('H', fp);
fputc('e', fp);
fputc('l', fp);
fputc('l', fp);
fputc('o', fp);
// 关闭文件
fclose(fp);
// 重新打开文件
fp = fopen("test.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
// 读取字符
while ((ch = fgetc(fp)) != EOF) {
printf("%c", ch);
}
// 关闭文件
fclose(fp);
return 0;
}
fgets()
和 fputs()
fgets()
fgets()
函数用于从文件中读取一行字符串,其原型如下:
char *fgets(char *str, int n, FILE *stream);
str
:用于存储读取的字符串的缓冲区。n
:要读取的最大字符数(包括结尾的\0
)。stream
:要读取的文件指针。NULL
。fputs()
fputs()
函数用于向文件中写入一个字符串,其原型如下:
int fputs(const char *str, FILE *stream);
str
:要写入的字符串。stream
:要写入的文件指针。EOF
表示失败。#include <stdio.h>
int main() {
FILE *fp;
char str[100];
// 打开文件
fp = fopen("test.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
// 写入字符串
fputs("Hello, World!\n", fp);
fputs("This is a test file.\n", fp);
// 关闭文件
fclose(fp);
// 重新打开文件
fp = fopen("test.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
// 读取字符串
while (fgets(str, 100, fp) != NULL) {
printf("%s", str);
}
// 关闭文件
fclose(fp);
return 0;
}
fscanf()
和 fprintf()
fscanf()
fscanf()
函数用于从文件中格式化读取数据,其原型如下:
int fscanf(FILE *stream, const char *format, ...);
stream
:要读取的文件指针。format
:格式化字符串,指定要读取的数据类型。...
:可变参数列表,用于存储读取的数据。EOF
。fprintf()
fprintf()
函数用于向文件中格式化写入数据,其原型如下:
int fprintf(FILE *stream, const char *format, ...);
stream
:要写入的文件指针。format
:格式化字符串,指定要写入的数据类型。...
:可变参数列表,包含要写入的数据。#include <stdio.h>
int main() {
FILE *fp;
int num;
float fnum;
// 打开文件
fp = fopen("test.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
// 写入格式化数据
fprintf(fp, "%d %f\n", 10, 3.14);
fprintf(fp, "%d %f\n", 20, 6.28);
// 关闭文件
fclose(fp);
// 重新打开文件
fp = fopen("test.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
// 读取格式化数据
while (fscanf(fp, "%d %f", &num, &fnum) != EOF) {
printf("%d %f\n", num, fnum);
}
// 关闭文件
fclose(fp);
return 0;
}
fread()
和 fwrite()
fread()
fread()
函数用于从文件中读取二进制数据,其原型如下:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
ptr
:用于存储读取数据的缓冲区。size
:每个数据项的大小(以字节为单位)。nmemb
:要读取的数据项数。stream
:要读取的文件指针。nmemb
的值。fwrite()
fwrite()
函数用于向文件中写入二进制数据,其原型如下:
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
ptr
:包含要写入数据的缓冲区。size
:每个数据项的大小(以字节为单位)。nmemb
:要写入的数据项数。stream
:要写入的文件指针。nmemb
的值。#include <stdio.h>
struct Student {
char name[50];
int age;
float score;
};
int main() {
FILE *fp;
struct Student stu1 = {"Alice", 20, 95.5};
struct Student stu2;
// 打开文件
fp = fopen("test.bin", "wb");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
// 写入二进制数据
fwrite(&stu1, sizeof(struct Student), 1, fp);
// 关闭文件
fclose(fp);
// 重新打开文件
fp = fopen("test.bin", "rb");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
// 读取二进制数据
fread(&stu2, sizeof(struct Student), 1, fp);
printf("Name: %s, Age: %d, Score: %.2f\n", stu2.name, stu2.age, stu2.score);
// 关闭文件
fclose(fp);
return 0;
}
C语言提供了多种函数用于文件的顺序读写操作。通过这些函数,程序可以方便地从文件中读取数据或将数据写入文件。本文详细介绍了fgetc()
、fputc()
、fgets()
、fputs()
、fscanf()
、fprintf()
、fread()
和fwrite()
等函数的使用方法,并通过示例代码展示了这些函数的实际应用。
在实际编程中,选择合适的文件读写函数可以大大提高程序的效率和可读性。希望本文能帮助读者更好地理解和掌握C语言中的文件操作。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。