我正在编写 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/