如何在C语言中从第二行开始读取字符串文件?

3

这段代码读取文件中的字符并计算字符长度。如何从第二行开始读取并忽略第一行?

以下是我的代码片段:

    int lenA = 0;
    FILE * fileA;
    char holder;
    char *seqA=NULL;
    char *temp=NULL;

    fileA=fopen("d:\\str1.fa", "r");
    if(fileA == NULL) {
    perror ("Error opening 'str1.fa'\n");
    exit(EXIT_FAILURE);
    }

    while((holder=fgetc(fileA)) != EOF) {
    lenA++;
    temp=(char*)realloc(seqA,lenA*sizeof(char));
    if (temp!=NULL) {
        seqA=temp;
        seqA[lenA-1]=holder;
    }
    else {
        free (seqA);
        puts ("Error (re)allocating memory");
        exit (1);
    }
}
cout<<"Length seqA is: "<<lenA<<endl;
fclose(fileA);

4
逐个读取字符,直到遇到\n,然后读取第二行。 - nhahtdh
2
读取第二行的唯一方法是先读取第一行并忽略它,然后继续读取第二行和随后的行,并根据需要处理它们。考虑使用 fgets() - Jonathan Leffler
2
你的代码基本上是 C 语言,唯一使用了 C++ 的功能是 cout。你应该坚持只使用其中一种语言。 - Zeta
2个回答

2
制作一个计数器来记录你看到了多少个\n,当计数器等于1时,跳转到读取第二行的内容。
    int line=0;
    while((holder=fgetc(fileA)) != EOF) {
     if(holder == '\n') line++;
     if(holder == 1) break; /* 1 because count start from 0,you know */
    }
    if(holder == EOF) {
     //error:there's no a 2nd
    }       
   while((holder=fgetc(fileA)) != EOF) { 
    // holder is contents begging from 2nd line
   }

你可以使用fgets()来使它更简单:

第一次调用 fgets() 并忽略返回值(为了检查错误,不要丢弃结果值);

第二次调用 fgets() 并开始读取。

注意:这里考虑的是 C 语言。


1
@milad_b:只需使用getline()函数。它是C++中类似于C的fgets()函数的等价物(粗略地说),除了getline()不会将\n放入缓冲区。但如果需要,您可以自行添加它。 - Jack

2

关于上一个回答有一个小错误。我进行了更正,这是我的代码:

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

#define TEMP_PATH "/FILEPATH/network_speed.txt"

int main( int argc, char *argv[] )
{
    FILE *fp;
    fp=fopen(TEMP_PATH, "r");

    char holder;

    int line=0;
    while((holder=fgetc(fp)) != EOF) {
        if(holder == '\n') line++;
        if(line == 1) break; /* 1 because count start from 0,you know */
    }
    if(holder == EOF) {
        printf("%s doesn't have the 2nd line\n", fp);
        //error:there's no a 2nd
    }       
    while((holder=fgetc(fp)) != EOF && (holder != '\n' )) { 
        putchar(holder);
    }
    fclose(fp);
}

这段代码存在一个缺陷,当我将 line==0 设置为显示第一行时,第一个字符会丢失。 - Chen Du

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接