可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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!
回答1:
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.
回答2:
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?
回答3:
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.