【问题标题】:fscanf issue with reading in key-value pairs读取键值对的 fscanf 问题
【发布时间】:2019-02-12 15:47:29
【问题描述】:

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

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

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

玩家.演员

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

代码:

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;
    }
  } 
}

【问题讨论】:

  • fscanf(file, "%i", &i);你需要传递地址。
  • 您应该收到警告。你的编译器是什么?
  • rewind(file); 没用,你打开文件就行了
  • 为什么continuewhile 中?你不需要它来循环^^
  • Visual Studio 2013 Ultimate,我没有注意到我仍然在那里继续。

标签: c scanf


【解决方案1】:

当我尝试将值 fscanf 到我的演员时,我得到一个异常。

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

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

【讨论】:

    猜你喜欢
    • 2010-11-06
    • 2016-07-27
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 2018-01-20
    • 1970-01-01
    相关资源
    最近更新 更多