关于读取键值对的 c:fscanf 问题

fscanf issue with reading in key-value pairs

编辑:自从被问到,我使用的是 Visual Studio 2013 Ultimate,它没有发出任何警告。

我对 C 有点陌生,文件 i/o 对我来说一直是个问题。我将如何以"keyName:valueName"的形式解析键值对?我的问题开始发挥作用,因为我的值可能是字符串、浮点数或无符号整数。

我正在使用 SDL2 编写游戏,并且尝试将各个演员的尽可能多的配置保存在单独的 .actor 文件中。按照一些示例代码,我设法通过 fscanf 读取了该对的关键部分,但是当我尝试将值 fscanf 到我的演员时,我得到了一个异常。

播放器.actor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
folder: images/Player/
scale: 1.0,1.0
color: 255,255,255,255
colorSpecial: 10,255,100,255
xOffset: 1
numAnimations: 3

name: idle
filename: playerIdle.png
length: 8
frameWidth: 39
frameHeight: 87
frameRate: 0.75
type: loop

name: attack
filename: playerPunch.png
length: 8
frameWidth: 50
frameHeight: 82
frameRate: 0.75
type: once

name: walk
filename: playerWalk.png
length: 7
frameWidth: 50
frameHeight: 82
frameRate: 0.85
type: loop

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void LoadActor(Actor *actor, char *filename)
{
  FILE * file;
  char buf[512];
  char* imageFile ="";
  int i = 0;

  file = fopen(filename,"r");

  if (!file)
  {
    return NULL;
  }

  rewind(file);

  while (fscanf(file,"%s", buf) != EOF) //this works
  {
    if (strcmp(buf,"numAnimations:") == 0) // this works
    {
        fscanf(file,"%i", i); // this doesn't?

        continue;
    }
  }
}


when I attempt to fscanf the value in to my actor I get an exception.

1
       fscanf(file,"%i", i); // this doesn't?

fscanf(file,"%i", &i); 你需要传递地址。
——约翰尼·莫普