2013-05-04 51 views
1

该代码读取文件中的字符并计算字符长度。我如何从第二行读取并忽略从第一行读取?如何从C的第二行读取字符串文件?

这是我的代码部分:

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 2013-05-04 17:13:40

+2

从第二行读取的唯一方法是读取第一行并忽略它,然后继续读取第二行和后续行并根据需要处理它们。考虑使用'fgets()'。 – 2013-05-04 17:33:10

+2

你的代码几乎是C,唯一的C++工具是'cout'。你应该坚持两种语言。 – Zeta 2013-05-04 17:46:21

回答

1

使你有多少\n看到一个计数器,当从第2行读==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()

打一个电话,而忽略它(通过不放弃的结果,值,错误检查);

打第二个电话,请求阅读。

注:我在这里考虑C语言。

+0

我的兴趣使用fgets()。我如何用C++编写这段代码? – 2013-05-04 18:29:52

+1

@milad_b:只需使用'getline()'函数。除了'getline()'没有把'\ n'放入缓冲区之外,C++与C的'fgets()'是等价的(大体上讲)。但是如果你需要,你可以自己添加它。 – Jack 2013-05-04 18:46:10

0

最后一个答案有一个小小的错误。 我改正了,这里是我的代码:

#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); 
} 
+0

这段代码有一个缺陷,当我设置'line == 0'来显示第一行时,第一个chractor将会丢失 – 2017-04-08 03:53:37

相关问题