这段代码背后的想法是读取输入文件,每行包含两位数字,然后将其打印到另一个文件中(有一些小的变化等).我能够使代码工作无障碍使用一个for循环,但只有当我知道有多少行在文件中.我现在使用的while循环不工作,有什么修正或想法,我可以重复fprintf直到文件结束?
示例输入= 1 2.3 2 5.9 3 2.7示例输出=客户1已花费2.3*2.99(对所有客户重复)
我只需要一种方法,让我的循环重复我的fscanf和print语句,直到文件的末尾。
我现在的循环由于分段错误而不工作。
#include <stdio.h>
int main(){
int customer1;
double cost1;
int x;
double totalCost = 0;
FILE * saleInput;
FILE * saleOutput;
saleInput = fopen("sales.txt","r");
saleOutput = fopen("recordsales.txt","w");
printf("Retrieving the Records from today's sale!\n");
while(fscanf(saleInput,"%d",&customer1)!=EOF)
{
fscanf(saleInput,"%d%lf",&customer1,&cost1);
cost1 = cost1*2.99;
printf("Customer: %d\t", customer1); //yes a tab character was used
printf("Spent: $%.2lf\n", cost1);
fprintf(saleOutput, "Customer: %d\t", customer1);
fprintf(saleOutput, "Spent: $%.2lf\n", cost1);
totalCost += cost1;
}
fprintf(saleOutput, "-----------------------------\n");
printf("-----------------------------\n");
printf("$%.2lf was made today.\n", totalCost);
fprintf(saleOutput,"$%.2lf was made today.\n", totalCost);
return 0;
}
字符串
2条答案
按热度按时间h22fl7wq1#
有4个问题:
cost1
,初始值不确定,需要初始化为0。customer1
的值阅读了两次。fopen
的调用是否成功。fscanf
不应该用在真实的的程序中,因为它不可能处理无效的输入。我假设sales.txt文件的格式如下:
字符串
你想要的是:
型
bttbmeg02#
我不得不将while(fscanf(sale Input,"%d”,&customer1)!= 0)改为while(fscanf(sale Input,“%d %lf”,&customer1,&cost1)!= 0),并去掉循环中多余的fscanf。谢谢!