c - 读取一个包含二维数据的文件并将它们存储到一个数组中(这是我第一次使用 c)

标签 c arrays

int main() {
    int i;int j;char c;double num;
    double point[65][2];
    FILE *myfile;
    myfile = fopen("point.txt","r");
    if(myfile == NULL)
    {
        printf("can not open file\n");
    }
    else{
        for(i=0;i<65;i++){
            for (j=0; j<2; j++) {
                fscanf(myfile, "%lf", &num);
                point[i][j]=num;
                printf("%lf",point[i][j]);

            }
        }
    }
    fclose(myfile);
}

我不知道为什么它总是给我一个空数组。数据中有 65 个观测值。这就是我创建 65x2 阵列的原因。

文件看起来像这样:

1.87046225914495 0.37205807606083

1.51453361512525 0.45942874936008

..

..

最佳答案

我看不到这段代码有任何错误。它可以稍微改变一下:

  • 你可以直接调用fscanf到目标值上(fscanf(myfile, "%lf", &(point[i][j]));)
  • 如果您的文件格式始终是 X*2 值,您可以删除第二个 for 循环并读取两个值(fscanf(myfile, "%lf%lf", &(point [i][0]), &(点[i][1]));)
  • 你应该在阅读后打印表格内容,这样你就可以确保打印最终值(如果,比方说,你在某一点覆盖了一些值)

我唯一的猜测是与文件格式有关。如果 scanf 读取值失败(没有足够的值,格式错误的文件……),您将得不到结果。

如@ameyCU 所述,您必须检查 fscanf 返回值。它返回成功读取的“ token ”数。你应该检查它是否真的 ==1,否则它意味着格式不好(或文件中没有可用数据)。在这种情况下,部分或全部表格的内容未定义(并且根据操作系统可以用 0 填充)。

编辑:如果此文件中确实有 65x2 值,请检查是否存在无效字符,即如果您使用 Word 或类似工具创建数据文件。

关于c - 读取一个包含二维数据的文件并将它们存储到一个数组中(这是我第一次使用 c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33676318/

相关文章:

c - 如何保存矩阵索引

java - 为什么我不能在这个 java 程序中打印数组 token[ ] 中的内容

c++ - _fullpath 返回 ex 的当前路径而不是驱动器号

c - Kmalloc 无法正常工作

用 C 计算二维数组的标准差

javascript - 在javascript中匹配来自两个数组的元素

c++ - 使用 cmake 在 Windows 上编译 C++ 数据库时出错

使用 C99 进行 C 结构初始化 - 混合命名和未命名成员是否有效?

arrays - Angularjs ng-repeat 数组 - 重复值

python - 带数组的傅里叶变换