本帖最后由 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.dataa
bb 1.000
cc 2.000 3.000 4.000
data2.dataa
bb 2.000
cc 3.000 5.000 7.000
|