c - 从 csv 读取数据时出现问题

标签 c csv struct

我正在编写 c 代码,需要读取 csv 数据并将其输入到结构中。不可否认,我都更熟悉 C++,并且之前没有做过太多从文件读取的工作,所以我可能会错过一些非常明显的东西。但是,当我在应该加载数据后检查结构数组时,我得到了正确的行数,但除了第二行之外的所有行都是空白的 - 而且出于某种原因,那一行只有一张笑脸......

这是我的代码:

void load_items(){
char file_name[20], buffer[MAX_LINE_LENGTH];
FILE *file;
int i;

printf("Enter the file to load data from: ");       //data.csv for here
scanf("%s", file_name);

file=fopen(file_name,"r");

if(file==NULL)
{
    printf("Can't open %s\n",file_name);
    //exit(EXIT_FAILURE);
}
else {
    printf("Congrats! you opened %s as your data source!\n", file_name);        //test to make sure opened file
    while((fgets(buffer, sizeof(buffer),file)) !=NULL)          //while the line isn't blank
    {
        scanf(buffer,"%s,%s,%d,%d",&places[i].name,&places[i].category,&places[i].x,&places[i].y);      //enter data into proper place
        printf("|%-23s|%-20s\t| ( %d, %d) |\n",places[i].name, places[i].category, places[i].x,places[i].y);    //test to see data
        i++;
    }
}
fclose(file);
}

这是它正在读取的信息的样子:

STARBUCKS COFFEE,cafeteria,7,11
Restaurant UNIVERSAL CLUB,cafeteria,18,16
PHONON CAFE ROOM,cafeteria,7,12
Craig's Cafe SEATTLE ESPRESS,cafeteria,18,11
Cafeteria NANAMI-TEI,cafeteria,11,7
IB Cafe,cafeteria,11,9
Restaurant Chez Jiroud,cafeteria,15,10
Labo Shop (NU CO-OP Shop),shop,29,19
NU CO-OP North,shop,11,5
Family Mart,shop,13,11
South Cafeteria,cafeteria,4,17
NU CO-OP South,shop,5,17
Amenity House,shop,6,17
FOREST Books & Cafe,cafeteria,19,7
Green Salon Higashiyama,cafeteria,21,8
Toyoda Auditorium / Symposion,Convention facility,17,15
Noyori Conference Hall,Convention facility,21,14
E & S Hall,Convention facility,16,9
Sakata & Hirata Hall,Convention facility,19,11

这是我实际得到的:

|                       |                       | ( 0, 0) |
|☺                      |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |
|                       |                       | ( 0, 0) |

如果不是那个奇怪的笑脸,我会认为它只是没有读取任何内容,或者没有将其传输到正确的结构中,但事实上我很困惑。非常欢迎任何建议,感谢您的宝贵时间!

最佳答案

尝试使用 fscanf 从文件读取而不是 scanf,并使用 %[^,](读取除 ',' 之外的所有内容) %s

Codesnip: while(fscanf(文件, "%[^,],%[^,],%d,%d", &places[i].name, &places[i].category, &places[ i].x, &places[i].y) == 4)

关于c - 从 csv 读取数据时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44922214/

相关文章:

c - 在终端上解密 openssl 库生成的密码,反之亦然

Python:使用 UTF-8 编码读取德语/西类牙语 CSV 文件

c# - 是否可以为自定义结构重载 "array assignment"?

在 C 中将项目强制转换到链表末尾

c - 在头文件中使用结构 "unknown type"错误

c - 在 x86 Assembly 中组装代码时出错

c - 在 LRU 平方算法中,最近最少使用的行是否始终为零?

c - libcurl:http 响应状态代码始终为 NULL?

python - 在Python中将文件的格式化内容保存到另一个文件

mysql - mysql - 在 SELECT * INTO OUTFILE(在文件名上)时使用变量(日期)