I need to use fscanf
to ignore all the white spaces and to not keep it.
I tried to use something like the combination between (*)
and [^\n]
as: fscanf(file," %*[^\n]s",);
Of course it crashed, is there any way to do it only with fscanf
?
code:
int funct(char* name)
{
FILE* file = OpenFileToRead(name);
int count=0;
while(!feof(file))
{
fscanf(file," %[^\n]s");
count++;
}
fclose(file);
return count;
}
Solved !
change the original fscanf()
to :
fscanf(file," %*[^\n]s")
;
read all the line exactly as fgets()
but didnt keep it!
A white space character causes fscanf(), scanf(), and sscanf() to read, but not to store, all consecutive white space characters in the input up to the next character that is not white space.
The secret to getting scanf to perform this way is to put a blank in the format string before the %c format specifier. The blank tells scanf to skip white space and it will actually skip any number of white space characters before reading and storing a character.
scanf() just stops once it encounters a whitespace as it considers this variable "done".
Adding a whitespace character in a scanf() function causes it to read elements and ignore all the whitespaces as much as it can and search for a non-whitespace character to proceed. scanf("%d "); scanf(" %d"); scanf("%d\n"); This is different from scanf("%d"); function.
Using a space (" ") in the fscanf format causes it to read and discard whitespace on the input until it finds a non-whitespace character, leaving that non-whitespace character on the input as the next character to be read. So you can do things like:
fscanf(file, " "); // skip whitespace
getc(file); // get the non-whitespace character
fscanf(file, " "); // skip whitespace
getc(file); // get the non-whitespace character
or
fscanf(file, " %c %c", &char1, &char2); // read 2 non-whitespace characters, skipping any whitespace before each
from:
Ignoring whitepace with fscanf or fgets?
Your code is crashing because you have a %s
in your format specifier in the fscanf
call, and you don't pass fscanf
a char *
to which you want it to write the string it finds.
See http://www.cs.utah.edu/~zachary/isp/tutorials/io/io.html.
from the fscanf man page:
A directive is one of the following:
· A sequence of white-space characters (space, tab, newline, etc.;
see isspace(3)). This directive matches any amount of white
space, including none, in the input.
so
fscanf(file, " %s\n");
will skip all whitespace before reading in characters.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With