Thanks, now I'm trying to get the maximum hour from the file and if two hours are equal then check their minutes to sort them in descending order. Would it be easier to use a structure in this case?
Code:
#include <stdio.h>
#include <stdlib.h>
int readFields(FILE* file_to_read, char* user, int* h, int* m)
{
return fscanf(file_to_read, "%20[^,],%d,%d", user, h, m); // should we give MAX length bewteen % and [^,]?
}
int main(int argc, char *argv[])
{
char user[21];
//hp, mp = previous hour and minutes; hi, mi = current hour and minutes
int hi, mi, hp, mp;
if(argc != 2)
{
printf("Invalid format.\n");
return -1;
}
FILE *file_to_read = fopen(argv[1], "r");
if(!file_to_read)
{
printf("ERROR opening the file.\n");
return 1;
}
if(readFields(file_to_read, user, &hp, &mp) == 3)
{
int maxHour = hp;
int maxMinutes = mp;
while(readFields(file_to_read, user, &hi, &mi) == 3)
{
printf("%s logged in at %d:%d.\n", user, hi, mi);
if(hp < hi)
{
maxHour = hi;
printf("%s user logged in at %d:%d\n", user, maxHour, mp);
hp = hi;
}
else
{
maxHour = hp;
printf("%s user logged in at %d:%d\n", user, maxHour, mi);
hi = hp;
}
if(hp == hi)
{
if(mp > mi)
{
maxMinutes = mp;
printf("%s logged at %d:%d\n", user, hp, maxMinutes);
mi = mp;
}
else
{
maxMinutes = mi;
printf("%s logged at %d:%d\n", user, hi, maxMinutes);
mp = mi;
}
}
}
}
/*else
{
printf("Invalid format.\n");
}*/
fclose(file_to_read);
return 0;
}
.txt file:
andrew,22, 25
anna, 21, 09
gogu, 22, 26
michael, 23, 44
john,12,43
gigi, 05, 30
Current output:
anna logged in at 21:9.
anna user logged in at 22:9
anna logged at 22:25
gogu logged in at 22:26.
gogu user logged in at 22:26
gogu logged at 22:26
michael logged in at 23:44.
michael user logged in at 23:26
michael logged at 23:44
john logged in at 12:43.
john user logged in at 23:43
john logged at 23:44
gigi logged in at 5:30.
gigi user logged in at 23:30
gigi logged at 23:44
Desired Output:
michael logged at 23:44
gogu logged at 22:26
andrew logged at 22:25
anna logged at 21:09
john logged at 12:43
gigi logged at 05:30