You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:18:03