使用fscanf()从C中的csv文件中读取

时间:2016-12-13 15:50:28

标签: c

我在使用这段代码时遇到了一些麻烦。我有一个文件products.csv,我正在尝试从中读取值并存储在结构中。其中一行是

Book,B123,The Hunt for Red October,12.99,28

因为标题中有空格,我知道我需要使用[^,]代替%s,所以fscanf()不会停留在空白处,但它会弄乱读取空格文件,我不知道如何解决它。这是代码:

typedef struct {
    char productType[15];
    char productID[4];
    char productDescription[100];
    double productPrice;
    int quantityInStock;
} product_t;    

int main() {
    product_t product1;

    read_products(&product1);
}

int read_products(product_t *product) {
    FILE *inFile = fopen("products.csv", "r");

    fscanf(inFile, "%[^,] %[^,] %[^,] %lf %d", product->productType, product->productID, product->productDescription, product->productPrice, product->quantityInStock);

    printf("%s %s %s %lf %d", product->productType, product->productID, product->productDescription, product->productPrice, product->quantityInStock);
}

1 个答案:

答案 0 :(得分:3)

您正在强制逗号之后的空格并且您没有解析逗号。改变这个

"%[^,] %[^,] %[^,] %lf %d"

进入这个:

"%[^,],%[^,],%[^,],%lf,%d"

其他您有更多错误:

  • productID[4]您需要一个包含5个字符的数组来容纳\0终止符。

  • productPricequantityInStock不是指针,因此在scanf中您需要传递指针(&product->productPrice&product-> quantityInStock

检查一个有效的例子here