В настоящее время я работаю над программой, которая считывает файл с именем accidents.txt, в котором содержатся данные о дорожно-транспортных происшествиях со смертельным исходом, и организует данные в три различные структуры в зависимости от времени аварии.
Формат текстового файла:
время (24-часовой формат) numOfVehicles numOfFatalities
Несколько строк из текстового файла:
2 2 1
18 3 1
1 1 1
7 2 1
19 1 1
Важно отметить, что они разделены вкладками (/ t).
У меня есть вся написанная программа, и она должна работать, кроме чтения в реальном файле и разделения строк для сохранения в моих структурах. Вся цель программы - сложить общее количество несчастных случаев, транспортных средств и смертельных случаев, связанных с каждым периодом времени, и вывести его.
Что-то в операторе while, особенно начало оператора while, неверно. После нескольких часов попыток выяснить, что я делаю неправильно, я не могу понять это. Ниже мой код.
#include <stdio.h>
#include <stdlib.h>
// Structure for organizing file data
struct stats {
int accidents, vehicles, fatalities;
double vehAccRat;
};
int main(void) {
// Declare file pointer
FILE *fp;
char line[256];
// Declare file name
char* filename = "accidents.txt";
// Declare structure variables
struct stats morning;
struct stats afternoon;
struct stats night;
// Open a file using fopen function then assign it to the file pointer
fp = fopen(filename, "r");
// If file is not found, exit program
if (!fp){
printf("Could not open file %s",filename);
exit(1);
} // End of if statement
// Iterate through file by each line and store data into respective time frame
while (fgets(line, sizeof(line),fp) != NULL) {
// Store line data in array
char *val1 = strtok(NULL, "/t");
char *val2 = strtok(NULL, "/t");
char *val3 = strtok(NULL, "/t");
// If time is from 6 - 12 add data to morning statistics
if (val1 <= 6 && val1 >= 12) {
morning.accidents += 1;
morning.vehicles += val2;
morning.fatalities += val3;
} // End of if statement
// If time is from 13 - 19 add data to afternoon statistics
else if (val1 <= 13 && val1 >= 19) {
afternoon.accidents += 1;
afternoon.vehicles += val2;
afternoon.fatalities += val3;
} // End of else if statement
// If time is from 20 - 23 or 0 - 5 add data to night statistics
else if ((val1 <= 20 && val1 >= 23) || (val1 <= 0 && val1 >= 5)) {
night.accidents += 1;
night.vehicles += val2;
night.fatalities += val3;
} // End of else if statement
} // End of while loop
// Close the file stream
fclose(fp);
// Calculate vehicle / accident ratio for each time group
morning.vehAccRat = morning.vehicles / morning.accidents;
afternoon.vehAccRat = afternoon.vehicles / afternoon.accidents;
night.vehAccRat = night.vehicles / night.accidents;
// Output data organized by time of day (morning/afternoon/night)
printf("Time Span\tAccidents\tVehicles\tFatals\t\tVeh./Acc.\n");
printf("-------------------------------------------------------------------------\n");
printf("Morning\t\t%d\t\t%d\t\t%d\t\t%.4f\n", morning.accidents, morning.vehicles, morning.fatalities, morning.vehAccRat);
printf("Afternoon\t%d\t\t%d\t\t%d\t\t%.4f\n", afternoon.accidents, afternoon.vehicles, afternoon.fatalities, afternoon.vehAccRat);
printf("Night\t\t%d\t\t%d\t\t%d\t\t%.4f\n", night.accidents, night.vehicles, night.fatalities, night.vehAccRat);
printf("-------------------------------------------------------------------------");
} // End of int main(void)
Заранее спасибо за любую помощь, я в полном недоумении.