C语言读取CSV文件时坐标数据无法正确打印存储问题求助
C语言读取CSV坐标并格式化输出存储解决方案
原代码存在的问题
- 多余的首行跳过逻辑:你的CSV文件第一行就是有效坐标数据,
if (row == 1) continue;会直接跳过第一个坐标 - strtok分隔符设置不一致:第一次调用strtok用的分隔符只有
,,第二次调用加了空格,会导致第二个值前面的空格处理异常 - 缺少数值存储逻辑:只做了打印,没有将字符串转为int类型存储下来,无法后续计算距离等操作
- 多余的头文件:
curses.h你当前的逻辑完全用不到,可以删掉避免编译报错
修正后完整代码
#include <stdio.h> #include <stdlib.h> #include <string.h> // 定义坐标存储结构体 typedef struct { int x; int y; } Point; int main() { FILE* fp = fopen("points.csv", "r"); if (!fp) { printf("Can't open file\n"); return 1; } char buffer[1024]; // 最多存储100个坐标,可按需调整大小 Point points[100]; int point_count = 0; while (fgets(buffer, 1024, fp) && point_count < 100) { char* x_str = strtok(buffer, ", "); char* y_str = strtok(NULL, ", \n"); // 加\n避免把换行符读进y的字符串里 if (x_str && y_str) { // 字符串转整数存储 points[point_count].x = atoi(x_str); points[point_count].y = atoi(y_str); // 按要求格式打印 printf("x:%d\ty:%d\n", points[point_count].x, points[point_count].y); point_count++; } } // 后续可以用points数组里的数值计算距离,示例如下: // int distance_square = ((points[1].x - points[0].x) * (points[1].x - points[0].x)) + ((points[1].y - points[0].y) * (points[1].y - points[0].y)); fclose(fp); return 0; }
改动说明
- 新增了
Point结构体用来批量存储x、y坐标,方便后续调用 - 删掉了无效的首行跳过逻辑,所有有效行都会被正常读取
- 统一strtok的分隔符为
, \n,可以同时处理逗号、空格、行尾换行符,避免读取到无效字符 - 用
atoi将读取到的字符串转为int类型存入结构体数组,后续可以直接调用数组元素做距离计算等操作 - 打印直接用格式化输出控制格式,和你要求的输出效果完全一致
内容的提问来源于stack exchange,提问作者Dilhan Bhagat
相关产品推荐
相关产品推荐

