Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can fscanf() read whitespace?

Tags:

c

string

file-io

I've already got some code to read a text file using fscanf(), and now I need it modified so that fields that were previously whitespace-free need to allow whitespace. The text file is basically in the form of:

title: DATA
title: DATA
etc...

which is basically parsed using fgets(inputLine, 512, inputFile); sscanf(inputLine, "%*s %s", &data);, reading the DATA fields and ignoring the titles, but now some of the data fields need to allow spaces. I still need to ignore the title and the whitespace immediately after it, but then read in the rest of the line including the whitespace.

Is there anyway to do this with the sscanf() function?

If not, what is the smallest change I can make to the code to handle the whitespace properly?

UPDATE: I edited the question to replace fscanf() with fgets() + sscanf(), which is what my code is actually using. I didn't really think it was relevant when I first wrote the question which is why I simplified it to fscanf().

like image 433
Graphics Noob Avatar asked Dec 23 '09 00:12

Graphics Noob


1 Answers

If you cannot use fgets() use the %[ conversion specifier (with the "exclude option"):

char buf[100];
fscanf(stdin, "%*s %99[^\n]", buf);
printf("value read: [%s]\n", buf);

But fgets() is way better.


Edit: version with fgets() + sscanf()

char buf[100], title[100];
fgets(buf, sizeof buf, stdin); /* expect string like "title: TITLE WITH SPACES" */
sscanf(buf, "%*s %99[^\n]", title);
like image 70
pmg Avatar answered Sep 20 '22 23:09

pmg