Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用sscanf返回参数_C - Fatal编程技术网

如何使用sscanf返回参数

如何使用sscanf返回参数,c,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]);// th

我当时正在从一个文本文件中读取一行,该文件的格式为: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

您可以一次扫描它们:

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]);
}
此时,您正在扫描一个位置(
状态[12]
),并希望该值存储在其他位置(
状态[0]

您还犯了一些错误:

  • 存储到
    char*
    数组中时,您应该存储到
    float
    数组中
  • 当它希望获取实际值时,使用带有
    printf
    的指针
  • 使用
    结束语句。。。?不确定这是否是打字错误

您可以一次扫描它们:

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]);
}
此时,您正在扫描一个位置(
状态[12]
),并希望该值存储在其他位置(
状态[0]

您还犯了一些错误:

  • 存储到
    char*
    数组中时,您应该存储到
    float
    数组中
  • 当它希望获取实际值时,使用带有
    printf
    的指针
  • 使用
    结束语句。。。?不确定这是否是打字错误

您正在表格的第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);
}
FILE*fp=fopen(文件名);
浮点数[3]={0};
if(fp){
对于(int i=0;i<3;++i)
fscanf(fp、%f、&tabNumbers[i]);
fclose(fp);
}

您正在表格的第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);
}
FILE*fp=fopen(文件名);
浮点数[3]={0};
if(fp){
对于(int i=0;i<3;++i)
fscanf(fp、%f、&tabNumbers[i]);
fclose(fp);
}
嗯。你因为(至少对我来说)误解数组在c中的工作方式而获奖

  • 在这两种情况下,您几乎肯定不需要
    [12]

    数组的名称(无论是
    还是
    状态
    )都可以自动转换为指向数组开头的
    字符*
    。所以

    sscanf(line,"%f", ...);
    
    扫描
    行的内容
    。然而,
    行[12]
    是位于
    (*行)+12
    位置的单个字符

  • 您需要一个
    浮点数
    来放入结果,或者需要将格式说明符从
    %f
    更改为
    %s
    。您不应该将
    %f
    的结果转换为
    字符*

  • 嗯。你因为(至少对我来说)误解数组在c中的工作方式而获奖

  • 在这两种情况下,您几乎肯定不需要
    [12]

    数组的名称(无论是
    还是
    状态
    )都可以自动转换为指向数组开头的
    字符*
    。所以

    sscanf(line,"%f", ...);
    
    扫描
    行的内容
    。然而,
    行[12]
    是位于
    (*行)+12
    位置的单个字符

  • 您需要一个
    浮点数
    来放入结果,或者需要将格式说明符从
    %f
    更改为
    %s
    。您不应该将
    %f
    的结果转换为
    字符*



  • 您是否为所有
    char*
    s分配了内存?您似乎也对
    float
    char*
    char*State[2000]感到非常困惑应为<代码>浮动状态[2000]您需要一个循环来读取所有状态。顺便说一句,你似乎不知道数组是如何工作的,你应该读一本书。你的数据类型真的很混乱。。。您是否打算使用2000个指向字符串(字符数组)的指针?还是2000个指向浮动的指针?或者只有2000个浮点数?您是否为所有
    char*
    s分配了内存?您似乎也对
    float
    char*
    char*State[2000]感到非常困惑应为<代码>浮动状态[2000]您需要一个循环来读取所有状态。顺便说一句,你似乎不知道数组是如何工作的,你应该读一本书。你的数据类型真的很混乱。。。您是否打算使用2000个指向字符串(字符数组)的指针?还是2000个指向浮动的指针?还是只有2000辆车?。。。更不用说
    scanf()
    需要一个地址,而不是地址的地址(
    &state[12]
    应该是
    state[12]
    ,如果state是
    float*state[2000]
    (并且内存已经分配)。@Jamie:我认为假设他的
    float*
    数组已经初始化了是有点乐观的:)非常感谢Mike kwan的解释性回复,您的评论非常有用。我非常欣赏你的优秀技能。@ USER99:如果你的问题有助于解决你的问题,请考虑接受一些问题。更不用说
    scanf()
    需要一个地址,而不是地址的地址(
    &state[12]
    应该是
    state[12]
    ,如果state是
    float*state[2000]
    (并且内存已经分配)。@Jamie:我认为假设他的
    float*
    数组已经初始化了是有点乐观的:)非常感谢Mike kwan的解释性回复,您的评论非常有用。我非常欣赏你的优秀技能。@ USER99:如果你的问题有助于解决你的问题,请考虑接受其中的一些问题:谢谢你的解释。我会考虑你的意见。干杯谢谢你的解释。我会考虑你的意见。干杯