当前位置:  开发笔记 > 编程语言 > 正文

读取.txt文件并将数据保存为C中的矩阵

如何解决《读取.txt文件并将数据保存为C中的矩阵》经验,为你挑选了1个好方法。

我有兴趣阅读.txt文件,并将数据保存在C中的矩阵中.

dist.txt is the following:
Distance    Amsterdam   Antwerp Athens  Barcelona   Berlin
Amsterdam   -   160 3082    1639    649
Antwerp 160 -   2766    1465    723
Athens  3082    2766    -   3312    2552
Barcelona   1639    1465    3312    -   1899
Berlin  649 723 2552    1899    -

事实上它有更多的城市,但没关系.

我想阅读这份文件并记录距离.我试过以下代码:

#include 
#include 
#include 
#include 

#define rows 6
#define cols 6

int main()
{
    FILE *nansa;
    char *buffer;
    int ret,row=0,i,j;

    char delims[]=" \t";
    char *result=NULL;

    double **mat=malloc( rows*sizeof(double*) );
    for(i=0; i4) break;
                mat[row][field]=atof(result);
                result=strtok(NULL,delims);
                field++;
            }
            ++row;
        }
        free(buffer);
    }
    fclose(nansa);
    for(i=0; i

但我没有得到我想要的东西......而且我不知道如何分隔名称和距离(字符和整数).如果有人能帮助我,我将非常感激!



1> Weather Vane..:

虽然用它fgets来读取每一行很有诱惑力(这feof是错误的),但问题只是少数城市的例子:也许有10000个.所以我假设任何城市的名称都小于64(仅供输入).保留的内存对于名称的实际长度是正确的.

行和列将是相同的,因此没有不同的定义:实际上我只定义了城市的数量.我为城市名称(相同的向下)和距离使用单独的数组.

为了简单起见,我已经完成了错误检查,但在没有消息的情况下中止了.但是需要修改的地方是城市是一个多字的名称,如洛杉矶(%s停在任何空白处).您需要一个不同的方法,或者使用下划线来破坏city_name.

#include 
#include 
#include 

#define cities 5

int main(void){

    FILE *nansa;
    char buffer[64];
    char distname[64];                      // just to save work
    char *city[cities];                     // city names
    int *dist[cities];                      // distance array
    int i, j, len, wid = 0;

    if((nansa = fopen("dist.txt","r")) == NULL)
        exit(1);                            // file open fault

    // read the headings
    if(fscanf(nansa, "%63s", buffer) != 1)  // read the word for "distance"
        exit(1);                            // fscanf fault
    strcpy(distname, buffer);

    for(i=0; i

节目输出:

Distance  Amsterdam Antwerp   Athens    Barcelona Berlin
Amsterdam -         160       3082      1639      649
Antwerp   160       -         2766      1465      723
Athens    3082      2766      -         3312      2552
Barcelona 1639      1465      3312      -         1899
Berlin    649       723       2552      1899      -

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有