首页 > 解决方案 > 在c中读取文件的第二个字

问题描述

我在 c 中有这个函数,它将文件中的所有数字保存在一个整数变量中。但是我想进行更改,以便我可以将每行空格之间的第二个数字保存到向量中,然后打印所有向量。以下是 file.txt 的示例:

123  19
321  18
432  9
876  16
875  17

这是必须更改的代码:

void LerVetor(int *V, int *N) {
        FILE *fp;
        int marks;
        fp = fopen("dados3.txt", "r");

        if(fp == NULL)
                printf("Falha ao abrir ficheiro\n");


        rewind(fp);

        do {
                fscanf(fp, "%d", &marks);
                printf("%d\n", marks);

        }
        while(!feof(fp));


        fclose(fp);

}

输出与 file.txt 相同,因为代码只是打印文件的内容。

简历:仅将每行的第二个数字(例如:19、18、9...)保存在一个向量中,然后打印该向量。

标签: carraysfilevector

解决方案


尝试使用逐行读取文件fgets并使用sscanf. 如果您在读取之前不知道向量的长度(= 行数),您可以使用以下命令动态增加每个读取行的向量realloc

char line[20];
int *vector = NULL;
int length = 0;

// open file
while(fgets(line, sizeof(line), fp) != NULL) {
    vector = realloc(vector, (length+1)*sizeof(int));
    sscanf(line, "%*d %d\n", &vector[length++]);
}
// close file

然后你可以像这样打印结果向量:

printf("Read %d numbers:\n", length); 
for (int i=0; i<length; i++)
    printf("%d\n", vector[i]);

当然不要忘记free分配的内存。


推荐阅读