scanf for a possibly empty string

37 Views Asked by At

trying to undestand scanf()

I had two files to be read and parse the contents strings for values:

scanf1.txt
GAMEVERSION=1
FILEVERSION=1

scanf2.txt
FILEVERSION=2
GAMEVERSION=2

In the following code example:

#include <stdio.h>

int main (int argNum, char* argVect[]) {
   FILE *f1;
   FILE *f2;
   int ret;
   int fileversion=0;
   int gameversion=0;

   f1 = fopen("scanf1.txt", "rb");
   f2 = fopen("scanf2.txt", "rb");

   ret=fscanf(f1, "%*s FILEVERSION=%d", &fileversion);
   printf("f1 ret:%d filever:%d\n", ret, fileversion);
   fileversion=0;

   ret=fscanf(f2, "%*s FILEVERSION=%d", &fileversion);
   printf("f2 ret:%d filever:%d\n", ret, fileversion);
   rewind (f1); rewind (f2);

   ret=fscanf(f1, "%*s GAMEVERSION=%d", &gameversion);
   printf("f1 ret:%d gamever:%d\n", ret, gameversion);
   gameversion=0;

   ret=fscanf(f2, "%*s GAMEVERSION=%d", &gameversion);
   printf("f2 ret:%d gamever:%d\n", ret, gameversion);

   fclose(f1);
   fclose(f2);
   return 0;
}

tryed some scanf variations without success.

With format as one of the following:

"%*s FILEVERSION=%d"
"%*[A-Z=0-9] FILEVERSION=%d"
"%*14c FILEVERSION=%d"
"%*14cFILEVERSION=%d"

(and same format with "GAMEVERSION=" in the second two)
I got this output:

f1 ret:1 filever:1
f2 ret:0 filever:0
f1 ret:0 gamever:0
f2 ret:1 gamever:2

With format as the following:

"%*[^F] FILEVERSION=%d", &fileversion
"%*[^G] GAMEVERSION=%d", &gameversion

I got this output:

f1 ret:1 filever:1
f2 ret:0 filever:0
f1 ret:0 gamever:0
f2 ret:1 gamever:2

With format as the following:

"FILEVERSION=%d"

I got this output:

f1 ret:0 filever:0
f2 ret:1 filever:2
f1 ret:1 gamever:1
f2 ret:0 gamever:0

So seems no unique code can read both files for
"FILEVERSION=" and "GAMEVERSION=" values
as the string before the match can be empty.

Is there a method with scanf to read a possibly empty string?

0

There are 0 best solutions below