c fscanf按模式保存

时间:2012-11-13 07:49:38

标签: c

这是我试图分割的一条线,从开始到:,吃掉任何空格,然后从那里开始:

file1: file2,file3,file4

我的代码是:

while(fscanf(fp,"%s: %s",map[i].name, map[i].filesNeeded) == 1)
{
   printf("%s %s\n",map[i].name, map[i].filesNeeded);
   i++;
}

永远不会保存第二个参数。结果是:

file1: 
file2,file3,file4

而不是:

file1 file2,file3,file4

2 个答案:

答案 0 :(得分:3)

首先,fscanf会增加匹配的每个项目的回报,因此它应该是== 2.

此外,您将需要使用%[^:]而不是%s,因为%s将不知道何时停止。

int main(int argc, char** argv)
{
  char test[] = "one: two,three";

  char part1[20];
  char part2[20];

  printf("%i\n", sscanf(test, "%[^:]: %s", part1, part2));

  printf("%s %s\n", part1, part2);
}

输出:

2
one two,three

答案 1 :(得分:0)

while(fscanf(fp,"%[^:]: %s",map[i].name, map[i].filesNeeded) == 2)
{
   printf("%s %s\n",map[i].name, map[i].filesNeeded);
   i++;
}

我修改了代码。你可以尝试一下。