0

我当时正在从具有以下格式的文本文件中读取一行: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
4

3 回答 3

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在预期接收实际值时使用指针
  • 用于.结束语句...?不确定这是否是一个错字
于 2012-04-26T14:19:50.987 回答
1
sscanf(line[12],"%f", &State[12]).

好的。您因以一种新的方式(至少对我而言)误解了数组在 c 中的工作方式而获奖。

  1. 在这两种情况下,您几乎肯定都不想要[12]

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

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

    扫描line. 位置上line[12]单个字符如何(*line)+12

  2. 您需要 afloat将结果放入,或者您需要将格式说明符从 更改%f%s。你永远不应该把结果 a%f变成 a char*

于 2012-04-26T14:26:58.823 回答
0

您将数字放在表的第 12 格中;那很奇怪。

直接使用 fscanf 不是更容易吗?

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

if (fp) {
    for (int i = 0; i < 3; ++i)
        fscanf(fp, "%f", &tabNumbers[i]);
    fclose(fp);
}
于 2012-04-26T14:23:19.370 回答