how to ignore whitespaces in fscanf()

匿名 (未验证) 提交于 2019-12-03 00:55:01

问题:

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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!