C++ 如何从C中的第二行读取字符串文件?

C++ 如何从C中的第二行读取字符串文件?,c++,c,C++,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");

此代码读取文件中的字符并计算字符长度。我怎么能从第二行读取而忽略从第一行读取

这是我代码的一部分:

    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);
int lenA=0;
文件*fileA;
持炭器;
char*seqA=NULL;
char*temp=NULL;
fileA=fopen(“d:\\str1.fa”、“r”);
if(fileA==NULL){
perror(“打开'str1.fa'时出错”);
退出(退出失败);
}
而((持有人=fgetc(文件A))!=EOF){
lenA++;
temp=(char*)realloc(seka,lenA*sizeof(char));
如果(温度!=NULL){
seqA=温度;
Seka[lenA-1]=持有人;
}
否则{
免费(seka);
puts(“错误(重新)分配内存”);
出口(1);
}
}

无法制作一个计数器,计算您看到的
\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
   }
您可以使用以下方法使其更简单:

进行一次调用并忽略它(通过不放弃结果值进行错误检查)

打第二个电话,请求阅读


注意:我正在考虑C语言。

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

#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);
}
#包括
#包括
#定义临时路径“/FILEPATH/network\u speed.txt”
int main(int argc,char*argv[])
{
文件*fp;
fp=fopen(临时路径,“r”);
持炭器;
内线=0;
而((持有人=fgetc(fp))!=EOF){
if(holder=='\n')行++;
如果(line==1)中断;/*1,因为计数从0开始,您知道*/
}
如果(保持器==EOF){
printf(“%s没有第二行\n”,fp);
//错误:没有第二个
}       
而((holder=fgetc(fp))!=EOF&&(holder!='\n')){
putchar(持有人);
}
fclose(fp);
}

逐个字符读取,直到遇到
\n
为止,然后读取第二行。从第二行读取的唯一方法是读取第一行并忽略它,然后继续读取第二行和后续行,并根据需要进行处理。考虑使用<代码> fgsSd()/<代码>。代码非常简单,只有C++的代码是<代码> cOUT/COD>。您应该坚持使用这两种语言中的一种。@milad\u b:只需使用
getline()
函数即可。它与C的
fgets()
相当(粗略地说),只是
getline()
没有将
\n
放入缓冲区。但是如果需要,您可以自己添加它。此代码有一个缺陷,当我设置
line==0
显示第一行时,第一个chractor将丢失