【问题标题】:Read second word of a file in c在c中读取文件的第二个字
【发布时间】:2020-03-23 16:38:14
【问题描述】:

我在 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...)保存在一个向量中,然后打印该向量。

【问题讨论】:

  • 您可以使用fgets逐行读取输入。根据输入格式的确切规范,有不同的方法可以获取每行中的第二个数字。一种选择是使用strtol(带有必要的错误处理)两次。

标签: c arrays file vector


【解决方案1】:

尝试使用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分配的内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多