【问题标题】:How to read a csv file in C?如何在 C 中读取 csv 文件?
【发布时间】:2021-02-17 11:22:52
【问题描述】:

我正在尝试读取 C 中的 CSV 文件。CSV 文件包含一列和 1024 行。 CSV 文件仅包含十进制数字。到目前为止,我有这段代码,但输出和 CSV 文件中的数字不匹配。 CSV 文件称为 file.csv

enter image description here

enter image description here

int main(void)
{
    FILE *stream;
    errno_t err;

    err = fopen_s(&stream, "file.csv", "r");
    if (stream == NULL) {
        printf("\n file opening failed ");
        return -1;
    }

    double values[1024];
    int count;
    for (count = 0; count < 1024; count++) {

        double u = fscanf_s(stream, "%d", &values[count]);
        printf("%d\n", u);
    }

return(0);

}

【问题讨论】:

  • 将文件前几行的实际内容作为文本而不是图像粘贴到问题中。

标签: c csv import


【解决方案1】:

使用%lg而不是%d扫描并打印double对象。

fscanf_s 的返回类型是 int,而不是 double。测试它以查看是否分配了所需数量的项目(在您的情况下为一个),如果没有,则打印错误消息并退出程序。

【讨论】:

  • 我将 %d 更改为 %lg。但是,我仍然得到输出整数值。是否有类似的 fscanf_s 函数,返回类型为双精度值?你知道什么是“errno_t err;”吗?在做什么?
  • 没有返回doublefscanf_s 的变体,也不应该有,因为返回的信息本质上是一个整数:分配的项目数或EOF 如果结束-在第一次匹配之前发生文件或 I/O 错误。使用fscanf_s 的返回值来测试错误,而不是接收扫描值。扫描值通过&amp;values[count] 传递给fscanf_s 的指针进行通信。
  • errno_t err;err 定义为errno_t 类型的变量,即fopen_s 返回的类型。与fscanf_s 的返回值一样,您应该测试返回值以查看是否发生错误。如果不为零,则发生错误。
  • 我确实测试过,命令窗口中没有出现错误。但是,我没有得到作为输出打印出来的 1024 个纵横比的值。
猜你喜欢
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 2021-11-19
  • 2021-03-21
相关资源
最近更新 更多