Search code examples
cstringoutputscanfimperative

sscanf for formatting string from file


As part of a homework assignment I need to load a file with data in the following format:

R1  Fre     17/07/2015   18.00     FCN - SDR     0 - 2     3.211   
R1  Lor     18/07/2015   16.00     FCM - VFF     2 - 0     7.232   

For doing so I used fgets to store the string in a temporary string and after that sscanf to format the string while iterating through the file line by line.

while(fgets(temp, MAX_LINE_SIZE, input_file)!= NULL) {
  sscanf(temp, 
    " %*s %3s %d / %d / %d %s %3s - %3s %d - %d %6s",

    round[i].match[j].weekday, 
    &round[i].match[j].day, 
    ..... And so on ....
  j++;
}

Current output is:

Weekday: Fre18.00FCNSDR3.211
Day: 17
Month: 7
Year: 2015
Start: 18.00FCNSDR3.211
Home team: FCNSDR3.211
Away team: SDR3.211
Score: 0 - 2
Viewers: 3.211

Expected output is:

Weekday: Fre
Day: 17
Month: 7
Year: 2015
Start: 18.00
Home team: FCN
Away team: SDR
Score: 0 - 2
Viewers: 3.211

The strings with %s placeholder in sscanf seems to putting themselves together for some reason.

All help is much appreciated.


Solution

  • Are you sure you're storing strings like Fre in a 4-byte character array?

    %3s actually reads in 4 bytes. F, r, e, and \0. If you use an array too small then you overwrite the \0, causing the string to include whatever comes next in memory (in this case, more strings).