|
发表于 2019-9-29 00:48:31
|
显示全部楼层
本帖最后由 jackz007 于 2019-9-29 02:06 编辑
- #include <stdio.h>
- #include <string.h>
- int main(void)
- {
- char s1[260] , s2[256][16] ;
- FILE * fp1 , * fp2 ;
- float f ;
- int c , d , k , m ;
- if((fp1 = fopen("data1.dat" , "r")) != NULL) {
- if((fp2 = fopen("data2.dat" , "w")) != NULL) {
- fgets(s1 , 256 , fp1) ; // 读取文件第 1 行内容
- c = 0 ; // 文件行号初始化为 0
- while(! feof(fp1)) { // 循环读取文件内容,直到文件结束
- k = m = 0 ;
- s1[strlen(s1) - 1] = '\0' ; // 去掉行末的回车符
- c ++ ; // 文件行号加 1
- while(k < strlen(s1)) {
- d = 0 ;
- while(k < strlen(s1) && s1[k] == ' ') k ++ ; // 越过第 m 项后面的空格
- while(k < strlen(s1) && s1[k] != ' ') s2[m][d ++] = s1[k ++] ; // 复制第 m 项内容
- s2[m][d] = '\0' ; // 第 m 项字符串末尾添加结束标志
- m ++ ;
- }
- for(k = 0 ; k < m ; k ++) { // 生成输出文件行内容,m 代表本行的项数
- if(! k) {
- strcpy(s1 , s2[0]) ;
- } else {
- strcat(s1 , " ") ;
- sscanf(s2[k] , "%f" , & f) ;
- sprintf(& s1[strlen(s1)] , "%.3f" , f + k) ; // 每一项的值等于原来的值 + 本项的序号
- }
- }
- fprintf(fp2 , "%s\n" , s1) ; // 把新行写入文件
- fgets(s1 , 256 , fp1) ; // 新读取 1 行文件内容
- }
- fclose(fp2) ;
- }
- fclose(fp1) ;
- }
- }
复制代码
data1.dat
- aa
- bb 1.000
- cc 2.000 3.000 4.000
复制代码
data2.dat
- aa
- bb 2.000
- cc 3.000 5.000 7.000
复制代码 |
|