2013-05-04 86 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

相關問題