我正在编写一个用以下格式解析csv文件的程序:
hotdog,10,2,1.5
bun,10,2,0.5
代码应该删除文件的每一行,截至目前我只是尝试打印值以确保格式正确。我的问题是正确解释数字数据 - 而不是在csv文件中打印整数值,程序正在打印零。该程序正确解析csv中每条记录的第一个字段,所以我认为问题与我的atoi格式有关。这是我写的代码:
char buffer[512]; //512 byte buffer holds the 10 food item names
char* currentLine = buffer; //a temporary pointer to hold the current line read from the csv file
FILE* fp = fopen("inventory.csv", "rw"); //open the inventory.csv file with read and write capabilities.
int i = 0; //counter
while(fgets(currentLine, 1024, fp) != NULL){
printf("%s\n", strtok(currentLine, ",")); //get first field. Should be the food name.
printf("%d\t", atoi(strtok(currentLine, ","))); //get second field. Should be stock amount
printf("%d\t", atoi(strtok(currentLine, ","))); //get third field.
printf("%f\n", atof(strtok(currentLine, ","))); //get forth field.
i++;
}
fclose(fp);
按原样运行会产生以下输出:
hotdog
0 0 0.000000
bun
0 0 0.000000
我的atoi格式有问题吗?
答案 0 :(得分:2)
查看strtok的文档,例如: http://www.cplusplus.com/reference/cstring/strtok/
只有第一次调用需要缓冲区。 后续调用应传递空指针以检索以下标记。
答案 1 :(得分:0)
问题在于strtok
。在第一次调用strtok
之后,如果您希望它继续解析相同的字符串而不是从头开始,则必须提供NULL
作为第一个参数。请参阅文档:http://www.cplusplus.com/reference/cstring/strtok/