Рассмотрим файл,
L,12/5/2008,Blacktown
C,Willy Wonker,10.00
C,Adolph Hitler,20.00
C,Attila the Hun,30.00
C,Idi Amin,40.00
C,Ghengis Khan,50.00
T,150.00
L,13/5/2008,Parramatta
C,Attila the Hun,100.10
C,Willy Wonker,200.20
C,Ghengis Khan,300.30
T,600.60
L,14/5/2008,Mount Druitt
C,Adolph Hitler,1000.00
T,2000.00
L,15/5/2008,Penrith
T,0.00
L,16/5/2008,Chatswood
C,Ghengis Khan,1.00
C,Idi Amin,10.00
C,Adolph Hitler,100.00
C,Attila the Hun,1000.00
T,1111.00
Мне нужно написать программу, которая открывает файл Collections.txt
, читает его, форматирует в указанном порядке и записывает в другой файл с именем Reports.txt
,Мне нужно иметь date
, tab
, а затем name
.Затем новая строка и names
, tab
и amount
.Повторяйте, пока не будет обнаружен T
;это сигналы, у нас больше нет коллекций для вышеуказанного местоположения.Затем промойте и повторите для каждого местоположения, пока оно не достигнет конца файла, и итоговая сумма должна отображаться.
Вот код, который я написал,
/*
This program collects data and writes it to a specific file.*/
#include <stdio.h>
#include <stdlib.h>
void debt_calculator();
void main()
{
printf("This is a debt collection program:\n ");
debt_calculator();
scanf("%*c");
}
void debt_calculator()
{
char code;
int date [40];
char location [40];
char name [40];
float amount = 0;
float total = 0;
float grand_total;
int ctr = 0;
FILE * Collections;
Collections=fopen("C:\\Users\\Nick\\Documents\\Visual Studio 2010\\Projects\\Assignment2\\Assignment2\\Collections.txt","r");
if(Collections==NULL)
{
printf("file not open:\n");
exit(1);
}
FILE * Report;
if((Report=fopen("C:\\Users\\Nick\\Documents\\Visual Studio 2010\\Projects\\Assignment2\\Assignment2\\Report.txt","w"))==NULL)
{
printf("can not open file: \n");
exit(1);
}
fscanf(Collections,"%c,",&code);
while(code == 'L')
{
fscanf(Collections,"%[^,],%s%*c",date,location);
fprintf(Report,"Date: %s \t Location: %s \n\n",date, location);
fscanf(Collections,"%c,",&code);
}
for(code == 'C'; ctr < 5; ctr++)
{
fscanf(Collections,"%[^,], %f %*c",name, & amount);
if(amount == 0)
{
fprintf(Report,"### No Collections for %s \n", location);
fprintf(Report,"total: \t 0.00\n");
}
fprintf(Report,"\n Name: %s \t Amount: %.2f \n",name, amount);
fscanf(Collections,"%c,",&code);
}
code == 'T';
while(code == 'T')
{
fprintf(Report,"Hello");
fscanf(Collections,"%f",& amount);
total += amount;
grand_total += total;
fprintf(Report,"Total: \t %.2f \n",& total);
fprintf(Report,"Grand Total of all Collections is: $ %.2f", grand_total);
fscanf(Collections,"%c" , & code);
}
fclose(Collections);
fclose(Report);
}
Когда я запускаюПриведенная выше программа отображает оператор printf()
, и когда я нажимаю клавишу ввода, он выходит.После этого я открою свой файл report.txt
и найду новую строку с вкладкой даты, а также все названия и стоимость до T
.Как только он доходит до 'T', он останавливается, я не могу заставить его перейти в последний цикл while, прочитать итог и распечатать его в файл, а затем повторить, проверив код еще раз.Код после T
- это L
, поэтому он должен вернуться в первый цикл while и прочитать, чем записать дату и местоположение, но это не так.Есть идеи, что я делаю не так?
Также, если есть какой-то лучший способ, которым вы думаете, что я должен делать это, пожалуйста, дайте мне знать.