优化#include <stdio.h> // 函数extractDigit的功能:从文件a.txt中提取数值写入文件b.txt中 void extractDigit(); // 请在此添加代码,实现extractDigit函数 /********** Begin *********/ char read(FILE *pi) { char c=fgetc(pi); if (c==EOF) { return EOF; } if (c<'0' || c>'9') { c=fgetc(pi); if (c==EOF) { return EOF; } } return c; } void extractDigit() { FILE *fa; FILE *fb; fa=fopen("a.txt","r"); fb=fopen("b.txt","w"); if (fa==NULL || fb==NULL) { return; } char c=read(fa); int num=0,k=0; while (c!=EOF) { num=num*10+c-'0'; k++; if (k==3) { fprintf(fb,"%d",num); k=0; num=0; } c=read(fa); } if (k!=0) { fprintf(fb,"%d",num); } fclose(fa); fclose(fb); } /********** End **********/
时间: 2024-01-17 10:40:11 浏览: 21
这段代码实现了从文件a.txt中提取数值并将其写入文件b.txt中的功能。具体实现方法是:定义了一个辅助函数read用于读取文件中的字符,当读到数字字符时返回该字符,否则继续读取直到读到数字字符为止。然后在extractDigit函数中,先打开a.txt和b.txt文件,如果文件打开失败则直接返回。接着使用read函数读取文件a.txt中的字符,将读到的数字字符转化为整型数,并且每读取3个数字字符就将其写入文件b.txt中。最后关闭文件a.txt和b.txt。
相关问题
实际的测试样例参见下文。 本关涉及的代码文件FigureTrasform.h的代码框架如下: #include<stdio.h> void figureTrasform(int n){ //在此写入函数体 //在函数体内实现输出 //注意主函数,非常重要 /Begin*/ /***************** End ******************/ } 主函数如下: #include<stdio.h> #include<string.h> //此处已导入 FigureTransform.h头文件 //所以下面的函数调用不需要再进行声明 #include"FigureTransform.h" //主函数 #include<stdio.h> #include<string.h> //此处已导入 FigureTransform.h头文件 //所以下面的函数调用不需要再进行声明 #include"FigureTransform.h" //主函数 int main(){ long n; scanf("%d",&n); if(n==0){ //如果输入的n是0,则输出‘0’,结束。 putchar('0'); return 0; } figureTrasform(n); //调用数字转换函数 return 0; } 测试说明 本关的测试过程如下: 平台编译FigureTrasformMain.c以及头文件FigureTransform.h,然后链接相关程序库并生成FigureTrasformMain.exe以及FigureTransform.h.gch; 平台运行FigureTrasformMain.exe,并以标准方式提供测试输入; 平台获取FigureTrasformMain.exe的输出,然后将其与预测输出对比,如果一致则测试通过;否则测试失败。 以下是平台对FigureTrasformMain.c的测试样例: 测试输入: 123456789 预期输出: 1 2 3 4 5 6 7 8 9 测试输入: -1314520 预期输出: ``-1 3 1 4 5 2 0 测试输入: 30569870 预期输出: 3 0 5 6 9 8 7 0
为了将一个整数 n 转换成字符串输出,我们可以使用递归的方式,将数字 n 的每一位依次转换成字符,然后再输出。具体实现如下所示:
```
void figureTrasform(int n){
if (n < 0) { // 如果 n 是负数,先输出负号
putchar('-');
n = -n;
}
if (n / 10 != 0) { // 如果 n 的位数不止 1 位,继续递归
figureTrasform(n / 10);
}
putchar(n % 10 + '0'); // 输出当前位的字符
}
```
在上面的代码中,我们首先判断 n 是否为负数,如果是,先输出一个负号,并将 n 转换成正数。接下来判断 n 是否是一位数,如果不是,则继续递归调用 figureTrasform 函数,将 n / 10 传入。最后,我们输出 n % 10 对应的字符,即当前位的字符。注意,我们需要将 n % 10 转换成字符,这里使用了 '0' 的 ASCII 码值加上 n % 10 的值,即 n % 10 + '0'。
现在让我们将上面的代码填入 FigureTrasform.h 文件中的 figureTrasform 函数中,并进行测试。
下列程序将数字字符串写入文件”data.txt“ #include<stdio.h> #include<string.h> int main(void){ FILE *fp; char buf[11] = "0123456789"; fp = 4 分 ; if( 2 分 ) { 4 分 ; fclose(fp); } else{ printf("unable to open the file !\n"); } return 0; }
下面是修改过的程序:
```
#include <stdio.h>
#include <string.h>
int main(void) {
FILE *fp;
char buf[11] = "0123456789";
fp = fopen("data.txt", "w");
if (fp != NULL) {
fwrite(buf, sizeof(char), strlen(buf), fp);
fclose(fp);
} else {
printf("unable to open the file !\n");
}
return 0;
}
```
主要修改如下:
1. 打开文件的方式应该是写入("w"),而不是 4 分。
2. 在成功打开文件后,使用 fwrite 函数将数字字符串写入文件。
3. 在完成文件操作后,需要关闭文件。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)