我需要使用fscanf
来忽略所有空格并且不保留它。
我尝试使用(*)
和[^\n]
之间的组合作为:fscanf(file," %*[^\n]s",);
当然它崩溃了,有没有办法只用fscanf
?
代码:
int funct(char* name)
{
FILE* file = OpenFileToRead(name);
int count=0;
while(!feof(file))
{
fscanf(file," %[^\n]s");
count++;
}
fclose(file);
return count;
}
解决了!
将原始fscanf()
更改为:
fscanf(file," %*[^\n]s")
;
完全按照fgets()
读取所有行,但没有保留它!
答案 0 :(得分:4)
使用fscanf格式的空格(“”)会使其读取并丢弃输入上的空格,直到找到非空白字符,并将输入上的非空白字符留作要读取的下一个字符。所以你可以做以下事情:
fscanf(file, " "); // skip whitespace
getc(file); // get the non-whitespace character
fscanf(file, " "); // skip whitespace
getc(file); // get the non-whitespace character
或
fscanf(file, " %c %c", &char1, &char2); // read 2 non-whitespace characters, skipping any whitespace before each
从:
答案 1 :(得分:3)
您的代码崩溃了,因为%s
来电中您的格式说明符中有fscanf
,并且您没有将fscanf
char *
传递给您想要的{{1}}它写下它找到的字符串。
请参阅http://www.cs.utah.edu/~zachary/isp/tutorials/io/io.html。
答案 2 :(得分:1)
:
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.
所以
fscanf(file, " %s\n");
在阅读字符之前,将跳过所有空格。