如何忽略fscanf()中的空格

时间:2013-12-20 21:56:23

标签: c scanf

我需要使用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()读取所有行,但没有保留它!

3 个答案:

答案 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

从:

Ignoring whitepace with fscanf or fgets?

答案 1 :(得分:3)

您的代码崩溃了,因为%s来电中您的格式说明符中有fscanf,并且您没有将fscanf char *传递给您想要的{{1}}它写下它找到的字符串。

请参阅http://www.cs.utah.edu/~zachary/isp/tutorials/io/io.html

答案 2 :(得分:1)

来自fscanf手册页的

   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");
在阅读字符之前,

将跳过所有空格。