C语言-I/O流设计实验攻略
实验目的
本实验主要目的是通过设计I/O流库加深对C语言输入输出的理解,提高编程能力和思维能力。在实验中,我们将通过设计自己的I/O函数库来完成对文件的读取和写入操作,并掌握标准I/O库中一些常用函数的实现方法。
实验内容
- 理解I/O流和C语言库函数 I/O 函数库的基本思想。
- 编写输入流和输出流的相应函数,传入文件路径和打开模式,进行读写操作。
- 通过打印输出流和读取输入流两个测试函数,对编写的库进行测试和验证。
实验原理
函数原型
//打开文件
FILE* fopen(const char* path,const char* mode);
//读取文件
int fread(void* ptr, size_t size, size_t nmemb, FILE* stream);
//输出到文件
int fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream);
//关闭文件
int fclose(FILE* stream);
流文件读写流程
输入流
- 打开文件,判断文件是否打开成功;
- 不停的读取字符直到该行结束;
- 如果遇到文件结束或者错误则退出。
输出流
- 打开文件,判断文件是否打开成功;
- 每次输出一个字符或者字节数据到文件;
- 如果遇到文件结束或者错误则退出。
实验步骤
编写读取输入流函数
int my_fgets(char *str, int n, FILE *stream){
int i;
for (i = 0; i < n-1; i++){
int ch = fgetc(stream);
if(ch == EOF){
if(i == 0){
return EOF; //文件结束或者错误
}
break;
}
str[i] = ch;
if(ch == '\n'){
break;
}
}
str[i] = '\0';
return i;
}
编写输出流函数
int my_fputs(const char *s, FILE *stream){
while(*s != '\0'){
if(fputc(*s, stream) == EOF){
return EOF;
}
s++;
}
return 0;
}
完整Code如下
#include <stdio.h>
#include <stdlib.h>
int my_fgets(char *str, int n, FILE *stream){
int i;
for (i = 0; i < n-1; i++){
int ch = fgetc(stream);
if(ch == EOF){
if(i == 0){
return EOF; //文件结束或者错误
}
break;
}
str[i] = ch;
if(ch == '\n'){
break;
}
}
str[i] = '\0';
return i;
}
int my_fputs(const char *s, FILE *stream){
while(*s != '\0'){
if(fputc(*s, stream) == EOF){
return EOF;
}
s++;
}
return 0;
}
int main(){
FILE *file;
char filename[] = "test.txt";
char buffer[20];
//写入字符串到文件
file = fopen(filename, "w");
my_fputs("Hello World, my name is Alex!\n", file);
fclose(file);
//读取字符串到buffer
file = fopen(filename, "r");
my_fgets(buffer, 20, file);
printf("%s", buffer);
fclose(file);
}
示例说明
示例一
假设我们有一个名为test.txt
的文件,其中已经存储了一些字符串。我们可以通过以下代码来读取这个字符串并打印它:
char filename[] = "test.txt";
FILE *file = fopen(filename, "r");
char buffer[20];
my_fgets(buffer, 20, file);
printf("%s", buffer);
fclose(file);
示例二
假设我们现在需要将一些字符串写入到文件中。我们可以使用以下代码来打开指定的文件并向其中写入指定的字符串:
char filename[] = "test.txt";
FILE *file = fopen(filename, "w");
my_fputs("Hello World, my name is Alex!\n", file);
fclose(file);
在上述代码中,我们可以在第45行的字符串中指定需要写入到文件中的文本。注意,在写入文本时,我们应该将\n
添加到其中,以便在每行的结尾添加换行符。
以上就是“C语言-I/O流设计实验”的完整攻略。通过本次实验,我们可以练习自己编写I/O函数库的能力,并且加深理解标准I/O库中的常用函数的实现方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言-I/O流设计实验 - Python技术站