无法从.csv文件检索数据

无法从.csv文件检索数据,c,scanf,C,Scanf,我试图从逗号分隔的.csv文件中读取两个值。 这是我的test.csv: 14,0.49 在做了一些研究之后,我发现这似乎与我的问题相似。以下是我的尝试: #include <stdio.h> #include <stdlib.h> int main() { float value_a; float value_b; FILE *fp = fopen("test.csv", "r"); char buffer_a[255]; char buff

我试图从逗号分隔的.csv文件中读取两个值。 这是我的test.csv:

14,0.49
在做了一些研究之后,我发现这似乎与我的问题相似。以下是我的尝试:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  float value_a;
  float value_b;

  FILE *fp = fopen("test.csv", "r");

  char buffer_a[255];
  char buffer_b[255];

  fscanf(fp, "%s%*c%s", buffer_a, buffer_b);

  value_a = atof(buffer_a);
  value_b = atof(buffer_b);

  printf("value_a is %f", value_a);
  printf("value_b is %f", value_b);

  fclose(fp);
}
我的程序(fscanf()尤其如此)成功地检索到14,然后atof()如我所料将其转换为浮点,但第二个数字仅检索为0.0

为什么fscanf无法检索逗号后的第二个值

谢谢

%
s跳过前导空格,扫描非空格并在空格上停止。第一个
%s
扫描
14,0.49
缓冲区a

这里有一种解决方法:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    float value_a;
    float value_b;

    FILE *fp = fopen("test.csv", "r");
    if (!fp)
    {
        perror("Could not open file");
        return EXIT_FAILURE;
    }
    if (fscanf(fp, "%f,%f", &value_a, &value_b) != 2)
    {
        perror("Could not read the file");
        return EXIT_FAILURE;
    }

    printf("value_a is %f\n", value_a);
    printf("value_b is %f\n", value_b);

    fclose(fp);
    return EXIT_SUCCESS;
}

... 并检查
fscant
的返回值,以确保它已成功。请在搜索字符串中使用google with
site:stackoverflow.com
,以便将来进行研究。有数百篇关于fscanf for csv的帖子,以及它是如何无法正常工作的。谢谢!为什么fscanf(fp、%f、%f、&value\u a和&value\u b)!=2.在C中,零表示false right?@0x76syoa8p,因为返回值是成功分配的接收参数数,在本例中必须为2,否则表示某种错误/不匹配,
#include <stdio.h>
#include <stdlib.h>

int main()
{
    float value_a;
    float value_b;

    FILE *fp = fopen("test.csv", "r");
    if (!fp)
    {
        perror("Could not open file");
        return EXIT_FAILURE;
    }
    if (fscanf(fp, "%f,%f", &value_a, &value_b) != 2)
    {
        perror("Could not read the file");
        return EXIT_FAILURE;
    }

    printf("value_a is %f\n", value_a);
    printf("value_b is %f\n", value_b);

    fclose(fp);
    return EXIT_SUCCESS;
}
value_a is 14.000000
value_b is 0.490000