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将丢失