使用fscanf从包含整数数组的文件中读取

时间:2015-03-12 03:36:48

标签: c file-io scanf

我正在尝试读取包含整数数组的JSON格式文件(例如[0,1,2,3,4]) 我想知道为什么fscanf跳过文件中的括号并在我使用

时直接转到数字
   // the type of value is integer
  FILE* fp=fopen(file,"r");
  fscanf( fp,"%d",&value);

我仍然是I / O的新手,我不知道为什么会这样。我想每当我调用fscanf时,文件指针就会向前移动1个位置。

1 个答案:

答案 0 :(得分:0)

您应该检查返回值。您的示例中的fscanf应该返回0,因为遇到的第一个非空格字符是[,它无法启动数字,因此解析失败。假定的返回值为0表示没有发生成功转换。 value的值可能保持不变(我在手册页中找不到具体的声明)。文件中的读取位置将在[之前,以便后续尝试从文件中读取int也将失败。

如何阅读json数组:

请注意,我不处理以下示例中的错误。你必须这样做......

scanf格式字符串可以包含转换规范,其中包含允许或禁止字符的列表。这可用于读取“离开”不是数字的任何内容:char buf[some large enough value]; fscanf(" %[^0-9]", buf);。阅读位置现在在第一个数字之前。

然后你会做一个循环做两件事:

我们前面的数字可以通过fscanf("%d", &value);轻松阅读。这也将在稍后的迭代中跳过该数字之前的可能空格。 现在我们必须处理逗号:fscanf(" %[,]", buf);(“读取逗号,可选地前面有空格”)。现在您可以阅读下一个号码。

最后一个数字后面不会有逗号。因此,读取逗号的尝试将失败(即返回0);这可以用作数组末尾指标。

如果可能有更多数组或其他内容,则必须读掉剩余的空格并关闭方括号,以便将数组后面的文件位置留给其他人。