读取行直到c编程中的特定行

时间:2015-03-09 19:51:30

标签: c arrays file-io

我想打印行直到指定的行。如下所示,文本文件的内容写在缓冲区数组上。如何从第一行打印到第五行或第六行?

代码:

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

int main(int argc, const char * argv[]) {

    char *buffer;
    int c;
    FILE *input;
    int i = 0;
    size_t buffer_size;

    input = fopen( "input.txt", "r");
    if ( input == NULL ) {
        perror("Error");
    }

    buffer_size = BUFSIZ;
    if ((buffer = malloc(buffer_size)) == NULL) {
        fprintf(stderr, "Error allocating memory (before reading file).\n");
        fclose(input);
    }


    while ((c = fgetc(input)) != EOF) {
        buffer[i++] = c;
    }

    //puts(buffer);


    fclose(input);  
    free(buffer);
    return 0;
}

文字内容:

1 test
2 test
3 test test
4 test
5 test test
6 test
7 test

3 个答案:

答案 0 :(得分:0)

使用fgets()就可以轻松完成此操作

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

int main(void)
 {
    char   buffer[BUFSIZ];
    FILE  *input;
    size_t lineCount;
    size_t maxLine;

    input = fopen("input.txt", "r");
    if (input == NULL)
     {
        perror("Error");
        return -1;
     }

    maxLine   = 5;
    lineCount = 0;
    while ((lineCount < maxLine) && (fgets(buffer, sizeof(buffer), input) != NULL))
     {
        puts(buffer);
        lineCount += 1;
     }

    return 0;
 }

阅读链接中的手册,了解其工作原理。

答案 1 :(得分:0)

使用getline()功能。此外,您还可以检查回车\r的出现次数以确定新行。跟踪计数,您将能够打印到您想要的线。

答案 2 :(得分:0)

#include <stdio.h>

int main(void) {
    FILE *input;
    int c, line, numOfLine = 0;

    printf("input line number : ");
    scanf("%d", &line);

    input = fopen("data.txt", "r");//Error handling is omitted

    while ((c = fgetc(input)) != EOF) {
        putchar(c);
        if(c == '\n' && ++numOfLine == line)
            break;
    }

    fclose(input);  
    return 0;
}