如何使用sscanf返回参数

时间:2012-04-26 14:15:47

标签: c

我正在从具有以下格式的文本文件中读取一行:2.34 4.68 5.98。我想将这些浮点值存储在一个数组中,以便我可以在以后使用每个参数但是一旦我使用sscanf并尝试打印我得到的参数0.任何想法是什么问题。谢谢。

    char* line[2000];
    char* State[2000];
    sscanf(line[12],"%f", &State[12]).
    printf("\n state 1: %2.3f", &State[0]);// this suppose to print 2.34 but it prints 0

3 个答案:

答案 0 :(得分:2)

您可以一次扫描所有内容:

float state[3];
if(sscanf(line[12], "%f %f %f", &state[0],
      &state[1], &state[2]) != 3) {
  ...
} else
  printf("\n state1: %f, state2: %f, state3:%f",
      state[0], state[1], state[2]);
}

目前您正在扫描到一个地方(State[12])并希望将该值存储在其他地方(State[0])。

你犯的更多错误:

  • 当您应该存储到char *数组中时存储到float数组
  • 在期望获取实际值时使用printf的指针
  • 使用.结束声明......?不确定这是否是拼写错误

答案 1 :(得分:1)

sscanf(line[12],"%f", &State[12]).

行。你因为有一种新的(至少对我来说)误解数组如何在c中工作的方式而获奖。

  1. 在这两种情况下,你几乎肯定不希望[12]

    数组的名称(lineState)可以自动转换为指向数组开头的char*。所以

    sscanf(line,"%f", ...);
    

    扫描line的内容。 line[12] (*line)+12位置float单个字符

  2. 您需要%f将结果放入,您需要将格式说明符从%s更改为%f。您应该永远不会将char*的结果变成{{1}}。

答案 2 :(得分:0)

你把数字放在桌子的第12个案例中;这很奇怪。

直接使用scanf是不是更容易?

FILE *fp = fopen(fileName);
float tabNumbers[3] = {0};

if (fp) {
    for (int i = 0; i < 3; ++i)
        fscanf(fp, "%f", &tabNumbers[i]);
    fclose(fp);
}