任务描述
本关要求编写函数ext\fractDigit
,该函数从已有的当前目录下的文件a.txt
中读取并解析出其中的数值,并将结果写到当前目录下的文件b.txt
中。
其中:文件a.txt
中包含各种字符,但只有数字字符是有效的,提取其中的数字字符,将每3
个数字组成一个整数,写到文件b.txt
中,每个整数之间用一个空格分开。读取过程中,如果a.txt
中最后剩下不到3
个数字字符,则将剩下的1
个或者2
个数字字符组成一个整数。
例如:
a.txt
中的内容是1j3j5sd0msd454ss3msd563
,则抽取出来写入文件b.txt
的内容应该是135 45 435 63
(第二个整数是由045
三个数字组成,所以是45
)。
相关知识(略)
编程要求
本关的编程任务是补全step1/fileTxt.c
文件中ext\fractDigit
函数,以实现使用FILE
结构来操作文本文件的要求。具体要求如下:
- 本关要求通过补全
step1/fileTxt.c
文件中ext\fractDigit
函数来实现从已有的当前目录下的文件a.txt
中读取并解析出其中的数值,并将结果写到当前目录下的文件b.txt
中的要求。 - 实际的测试样例参见下文。
测试说明
本关的测试文件是step1/main.c
,其中将会调用你在step1/fileTxt.c
文件中完成的ext\fractDigit
函数来完成本关任务。step1/main.c
的源代码如下所示:
#include #include //声明外部函数,函数ext\fractDigit在其它源文件中实现 extern void ext\fractDigit(); int main() { //准备文件a.txt的内容 FILE *fp = fopen("a.txt","w"); //打开文件a.txt用于写 char s[1000]; fgets(s, 999, stdin); //从键盘读取一行字符 fputs(s,fp); //将这一行字符写入文件a.txt中 fclose(fp); //关闭fp关联的文件a.txt ext\fractDigit(); //调用函数,抽取数字写入文件b.txt中 FILE *f = fopen("b.txt","r"); //以读的方式打开文件b.txt if(f==NULL) //打开失败则返回 return 0; int n,k=0; fscanf(f,"%d",&n); //从文件b.txt中读出一个整数到变量n中 while(!feof(f)) //如果文件没结束(读出的不是EOF) { k++; printf("%d ",n); //输出该整数到屏幕 if(k%10==0) //每十组一换行 printf("\n"); fscanf(f,"%d",&n); //读取下一个整数 } if(k%10!=10) //最后一行没有换行符则补上 printf("\n"); return 0; }
平台会对你编写的代码进行测试: 测试输入: q12h44h67k854ksd923823sf83wd38457sd433ds,
预期输出: 124 467 854 923 823 833 845 743 3
测试输入: 1212121212343434343445454545450000005656565665dfsd455
预期输出: 121 212 121 234 343 434 344 545 454 545
0 0 565 656 566 545 5
开始你的任务吧,祝你成功!