C语言/如何从一个文件读取输入并将输出写入另一个文件

C语言/如何从一个文件读取输入并将输出写入另一个文件,c,C,我在从一个文件读取输入并将输出写入另一个文件时遇到问题 这是我的密码 #include <stdio.h> #include <math.h> //Variables declarations FILE *reportfile; FILE *inputfile; char ratioName[20]; char nameorganization[25]; int asset1,asset2,asset3; int lia1,lia2,lia3; float asset;

我在从一个文件读取输入并将输出写入另一个文件时遇到问题

这是我的密码

#include <stdio.h>
#include <math.h>

//Variables declarations
FILE *reportfile;
FILE *inputfile;
char ratioName[20];
char nameorganization[25];
int asset1,asset2,asset3;
int lia1,lia2,lia3;
float asset;
float liabilites;
float ratio;
int ave_asset;
int ave_liabilites;
float ave_ratio;
char year[5]
//char currentasset[15];
//char currentLia[30];
//char tekstRatio[45];


//void
void ReadingData(void);
void DoCalcs(void);
void Report(void);


int main(void) {
    ReadingData();
    DoCalcs();
    Report();


 return 0;
}

void ReadingData(void){
    inputfile = fopen("c:\\class\\current.txt" , "r");
    fgets(nameorganization,25, inputfile);
    fscanf(inputfile,"%d%d\n", &asset1, &lia1);
    fscanf(inputfile,"%d%d\n", &asset2, &lia2);
    fscanf(inputfile,"%d%d", &asset3, &lia3);
   fclose(inputfile);
}

void DoCalcs(void){
    ratio = asset / liabilites;
    ave_asset = (asset1 + asset2 + asset3) / 3;
    ave_liabilites = (lia1 + lia2 + lia3) / 3;
    ave_ratio = ratio / 3;
}

void Report(void){
    reportfile = fopen("c:\\class\\alimbetm_cr.txt","w");
    fprintf(reportfile,"\n");
    fprintf(reportfile,"Current Ratio Report",ratioName);
    fprintf(reportfile,"Year");
    //fprintf(reportfile,"Current Asset",currentasset);


}


//void GettingInfo(void){
    //printf("Please type ratio: ");
    //scanf();
//}
这是它在新文件中应该如何显示的

Hi-Tech Leisure Products
Current Ratio Report

                Current           Current          Current
Year            Assets            Liabilities      Ratio
----------------------------------------------------------
2010              47900             31007             1.54
2011              34500              9100             3.79
2012              57984             14822             3.91
----------------------------------------------------------
Average           46795             18310             3.08

This report produced by Raul Jimenez.

请帮助

在这种情况下,您需要使用
“a”
而不是
“w”
,因为
写入
功能用于清除旧数据并写入新数据

在这种情况下,您需要使用
a
而不是
“w”
因为
write
函数用于清除旧数据并写入新数据

发布的代码不会编译!第一个问题是这种说法:

char year[5] 
缺少尾随分号

关于:

#include <math.h>
reportfile = fopen("c:\\class\\alimbetm_cr.txt","w");
模式
w
导致输出文件被截断为0长度

因为您希望保留输出文件的旧内容,只需添加更多数据。强烈建议使用

reportfile = fopen("c:\\class\\alimbetm_cr.txt","a");
其中模式
a
将以
append
模式打开输出文件,以便将新数据添加到现有文件的末尾

当然,一定要检查
reportfile
以确保它不为空(即调用
fopen()
成功)

注意:此语句不编译:

fprintf(reportfile,"Current Ratio Report",ratioName);
因为它有一个参数,但没有匹配的“输出格式转换”说明符。建议(在本例中)删除参数:
ratioName

fopen()
fclose()
的调用分散在整个代码中。在当前编写时,只会从输入文件读取一条记录,只会将一条记录写入输出文件。当输入文件包含多条记录时,这将是一个主要问题

“期望输出”表示第一件事应该是:“高科技休闲产品”,然后是:“当前比率报告”。然而,没有语句(在
报告()
)实际输出第二条语句,并且字符数组
ratioName[]
从未设置为任何特定值

“所需输出”表示两行列标题等,但没有代码实际输出这些列标题(除了
年份
)。对于数据行,
平均:
行,
作者
行也存在类似的考虑。每行的每个数据都需要由代码专门输出,它们不会“神奇地”出现在输出文件中

关于

ratio = asset / liabilites;
无论是
资产
还是
负债
都未设置为任何特定值,因此它们(由于它们的声明位置)将包含0.0f的值。因此此除法将导致代码被零除的崩溃


还有很多问题,但上面的内容应该会让您从正确的方向开始。

发布的代码无法编译!第一个问题是以下语句:

char year[5] 
缺少尾随分号

关于:

#include <math.h>
reportfile = fopen("c:\\class\\alimbetm_cr.txt","w");
模式
w
导致输出文件被截断为0长度

由于您希望保留输出文件的旧内容,只需添加更多数据

reportfile = fopen("c:\\class\\alimbetm_cr.txt","a");
其中模式
a
将以
append
模式打开输出文件,以便将新数据添加到现有文件的末尾

当然,一定要检查
reportfile
以确保它不为空(即调用
fopen()
成功)

注意:此语句不编译:

fprintf(reportfile,"Current Ratio Report",ratioName);
因为它有一个参数,但没有匹配的“输出格式转换”说明符。建议(在本例中)删除参数:
ratioName

fopen()
fclose()
的调用分散在整个代码中。在当前编写时,只会从输入文件读取一条记录,只会将一条记录写入输出文件。当输入文件包含多条记录时,这将是一个主要问题

“期望输出”表示第一件事应该是:“高科技休闲产品”,然后是:“当前比率报告”。然而,没有语句(在
报告()
)实际输出第二条语句,并且字符数组
ratioName[]
从未设置为任何特定值

“所需输出”表示两行列标题等,但没有代码实际输出这些列标题(除了
年份
)。对于数据行,
平均:
行,
作者
行也存在类似的考虑。每行的每个数据都需要由代码专门输出,它们不会“神奇地”出现在输出文件中

关于

ratio = asset / liabilites;
无论是
资产
还是
负债
都未设置为任何特定值,因此它们(由于它们的声明位置)将包含0.0f的值。因此此除法将导致代码被零除的崩溃


还有很多问题,但是上面的问题应该会让你朝着正确的方向开始。

你是说
current.txt
被删除了吗?为什么你所有的变量都是全局的,所有的函数参数列表都是空的?与你的问题无关:但是你应该关闭输出文件。如果我理解正确,你不希望e输出文件的旧内容将被新报告覆盖,对吗?然后您需要以追加模式打开输出文件。如果这不是您要问的,请通过删除它来澄清您的问题。好的,您需要回到您的C手册,学习如何使用
printf()
-族及其格式说明符。你是说
current.txt
被删除了吗?为什么所有变量都是全局变量,所有函数参数列表都是无效的?与你的问题无关:但你应该关闭输出文件。如果我理解正确,你不希望输出文件的旧内容被新报告,对吗?然后你需要打开输出文件