本关任务:给定程序的功能是:从键盘输入若干行文本(每行不超过 80 个字符),写到文件myfile4.txt中,用 -1(独立一行)作为字符串输入结束的标志。然后将文本的内容读出显示在屏幕上。文件的读写分别由自定义函数 readtext 和 writetext 实现。
相关知识
为了完成本关任务,你需要掌握:
文件的打开、关闭操作;
文件的读写操作。
编程要求
请再勿改动主函数 main 和其他函数中的任何内容,仅在程序的下划线处填入正确的内容并把下划线和数字删除,然后调试运行使程序得到正确的结果。不得增行或删行,也不得更改程序的结构。
测试说明
测试输入:
123
-1
测试输出:
Enter string with -1 to end :
Read file and output to screen :
123
//代码如下:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
//函数声明
void writetext(FILE*);
void readtext(FILE*);
int main(){
//打开文件,写入模式
FILE*file=fopen("myfile4.txt","w");
if(file==NULL){
cout<<"写入文件失败"<<endl;
return -1;
}
//写入文件
writetext(file);
//关闭文件,装换文件操作模式
fclose(file);
//读取模式
file=fopen("myfile4.txt","r");
if(file==NULL){
cout<<"打开文件失败"<<endl;
return -1;
}
//读取文件内容,显示在屏幕上
cout<<"Enter string with -1 to end :"<<endl;
cout<<endl;
readtext(file);
//关闭文件
fclose(file);
return 0;
}
void writetext(FILE* file){
while(1){
//每一行不超过80字符
char buffer[81];
//使用stdin标准输入模式,
//写入文件内容暂时存储在字符数组buffer sizeof(buffer)要读取的最大字符数量
if(fgets(buffer,sizeof(buffer),stdin)==NULL)
return;
//如果遇到-1就停止写入文件
if(strcmp(buffer,"-1\n")==0)
return;
//计算每一次写入文本长度
size_t length=strlen(buffer);
//buffer要写入文件的内容,sizeof(char)文本数据单元的大小,length要写入数据项的数量,file文件指针
fwrite(buffer,sizeof(char),length,file);
}
}
void readtext(FILE*file){
cout<<"Read file and output to screen :"<<endl;
while(1){
//将读取到的数据暂时存储在buffer中
char buffer[80];
//读取模式,使用file文件指针
if(fgets(buffer,sizeof(buffer),file)==NULL)
return;
//查找换行符,转换\0
buffer[strcspn(buffer,"\n")]='\0';
//如果遇到-1就停止读取文件
if(strcmp(buffer,"-1")==0)
return;
cout<<buffer<<endl;
}
}