我正在尝试读取以下格式的 CSV 文件:
1.00,1.00,hawaiian_m,1.00,1/1/2015,11:38:36,13.25,13.25,M,Classic,"Sliced Ham, Pineapple, Mozzarella Cheese",The Hawaiian Pizza
2.00,2.00,classic_dlx_m,1.00,1/1/2015,11:57:40,16.00,16,M,Classic,"Pepperoni, Mushrooms, Red Onions, Red Peppers, Bacon",The Classic Deluxe Pizza
3.00,2.00,five_cheese_l,1.00,1/1/2015,11:57:40,18.50,18.5,L,Veggie,"Mozzarella Cheese, Provolone Cheese, SmokedGouda Cheese, Romano Cheese, Blue Cheese, Garlic",The Five Cheese Pizza
并将每一列放入以下结构中:
typedef struct{
float pizza_id;
float order_id;
char pizza_name_id[50];
float quantity;
char order_date[50];
char order_time[50];
float unit_price;
float total_price;
char pizza_size;
char pizza_category[50];
char pizza_ingredients[100];
char pizza_name[50];
} order;
我尝试了以下代码,但没有显示 Pizza_ingredients 部分。
while (!feof(f))
{
read = fscanf(f,"%f,%f,%49[^,],%f,%49[^,],%49[^,],%f,%f,%c,%49[^,],%2047[^34],%49[^,]\n",
&or[linea].pizza_id,
&or[linea].order_id,
or[linea].pizza_name_id,
&or[linea].quantity,
or[linea].order_date,
or[linea].order_time,
&or[linea].unit_price,
&or[linea].total_price,
&or[linea].pizza_size,
or[linea].pizza_category,
or[linea].pizza_ingredients,
or[linea].pizza_name);
linea++;
}
您应该提供所有代码以便更好地调试
你有两个问题我已经帮你解决了
pizza_ingredients
应该是这样的: \"%2047[^\"]\"
因为里面有一些逗号,最后你也应该防止换行: %49[^,\n]
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
float pizza_id;
float order_id;
char pizza_name_id[50];
float quantity;
char order_date[50];
char order_time[50];
float unit_price;
float total_price;
char pizza_size;
char pizza_category[50];
char pizza_ingredients[100];
char pizza_name[50];
} order;
int main(int argc, char const *argv[])
{
FILE *f = fopen("test.csv", "r");
int linea = 0;
order or [3];
while (!feof(f))
{
printf("Linea %d\n", linea);
int read = fscanf(f, "%f,%f,%49[^,],%f,%49[^,],%49[^,],%f,%f,%c,%49[^,],\"%2047[^\"]\",%49[^,\n]\n",
& or [linea].pizza_id,
& or [linea].order_id,
or [linea].pizza_name_id,
& or [linea].quantity,
or [linea].order_date,
or [linea].order_time,
& or [linea].unit_price,
& or [linea].total_price,
& or [linea].pizza_size,
or [linea].pizza_category,
or [linea].pizza_ingredients,
or [linea].pizza_name);
printf("pizza_id : %f, order_id : %f, pizza_name_id: %s, quantity: %f, order_date:%s, order_time: %s, unit_price:%f, total_price: %f, pizza_size:%c, pizza_category: %s, pizza_ingredients: %s, pizza_name: %s \n", or [linea].pizza_id, or [linea].order_id, or [linea].pizza_name_id, or [linea].quantity, or [linea].order_date, or [linea].order_time, or [linea].unit_price, or [linea].total_price, or [linea].pizza_size, or [linea].pizza_category, or [linea].pizza_ingredients, or [linea].pizza_name);
linea++;
}
return 0;
}