如何从文件逐行读取

时间:2018-06-28 09:22:50

标签: c

我想创建一个函数read_ins,该函数仅从文件中读取第一行。

我希望我的代码在第二次调用中读取第二行,在第三次调用中读取第三行,依此类推...

这是我的代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>



int main()
{
    char *singleIns; // for reading from Instruction FILE
    char *instructions[3][3]; // all the Instructions

    singleIns = malloc(sizeof(char)*32);
    int i =0,j=0;

    // Read one Instruction (32bit)
    while (i<3){
        j=0;
        while(j<3){
            read_ins(singleIns); 
            instructions[i][j] = singleIns;
            j++;
        }
        i++;

    }

    printf("%s",instructions[0][0]);
    return 0;
}


void read_ins(char ins[]){
    FILE *fptr;
    if ((fptr = fopen("program.txt", "r")) == NULL){
        printf("Error! opening file");
        // Program exits if file pointer returns NULL.
        exit(1);
    }

    // reads text until newline
    fscanf(fptr,"%[^\n]", ins);

    fclose(fptr);
}

1 个答案:

答案 0 :(得分:0)

如您所见,函数read_ins总是输出文件program.txt的第一行。

这是因为每次使用fopen打开文件时,读取光标都是从文件的开头开始的。

要更改此行为,您应该打开文件,并将FILE *作为函数read_ins的参数,并使其保持打开状态直到主程序结束。

类似的东西:

int main(void)
{
    // Open file
    FILE *fptr;
    if ((fptr = fopen("program.txt", "r")) == NULL){
        printf("Error! opening file");
        // Program exits if file pointer returns NULL.
        exit(1);
    }

    // Read Instructions (32bit)
    while (i<3){
        read_ins(fptr, ins);
    }

    // Close file
    fclose(fptr);

    return 0;
}


void read_ins(FILE* fptr, char ins[]){
    // reads text until newline
    fscanf(fptr,"%[^\n]", ins);
}

由于新的read_ins仅一行,您可以摆脱它...

或者,您可以在read_ins中打开和关闭文件,但需要指定要返回的行号。并读取文件,直到找到正确的行。但是,每次打开和关闭文件时,这都非常昂贵。