将文本文件中的输入读入c中的结构数组

我的结构定义是,

typedef struct { int taxid; int geneid; char goid[20]; char evidence[4]; char qualifier[20]; char goterm[50]; char pubmed; char category[20]; } gene2go; 

我有一个名为“gene2go.txt”的标签分隔文本文件。

该文件的每一行都包含taxIDgeneIDgoIDevidencequalifiergotermpubmedcategory信息。

文件的每一行都将保存在一个结构中。

当程序运行时,它会首先将输入文件的内容读入gen2go类型的数组中,我使用了一个名为readInfo的函数。

该程序还将从命令行获取以下输入参数,

输入类型(1表示taxid ,2表示geneid ,3表示goid )和搜索词

有一个名为listData的函数将文件“gene2go.txt”中与输入类型和搜索项匹配的行列表写入文件“output.txt”。

这是我的文本文件"gene2go.txt"

 3702 814629 GO:0003676 IEA - nucleic acid binding - Function 3702 814629 GO:0005575 ND - cellular_component - Component 3702 814629 GO:0005634 ISM - nucleus - Component 3702 814629 GO:0008150 ND - biological_process - Process 3702 814629 GO:0008270 IEA - zinc ion binding - Function 3702 814630 GO:0005634 ISM - nucleus - Component 3702 814636 GO:0008150 ND - biological_process - Process 3702 814637 GO:0003674 ND - molecular_function - Function 6239 177883 GO:0008150 ND - biological_process - Process 6239 177884 GO:0005575 ND - cellular_component - Component 6239 177884 GO:0008150 ND - biological_process - Process 6239 177886 GO:0004364 IDA - glutathione transferase activity 12757851 Function 6239 177886 GO:0005575 ND - cellular_component - Component 7955 555450 GO:0005634 IEA - nucleus - Component 7955 555450 GO:0006355 IEA - regulation of transcription, DNA-dependent - Process 

我编写了下面名为ceng301.c的代码,并使用命令行编译它

gcc ceng301.c -o ceng301

,但是当我写作

ceng301 1 3702

在命令行中,我什么都没得到,但闪烁的下划线:(而不是

 3702 814629 GO:0003676 IEA - nucleic acid binding - Function 3702 814629 GO:0005575 ND - cellular_component - Component 3702 814629 GO:0005634 ISM - nucleus - Component 3702 814629 GO:0008150 ND - biological_process - Process 3702 814629 GO:0008270 IEA - zinc ion binding - Function 3702 814630 GO:0005634 ISM - nucleus - Component 3702 814636 GO:0008150 ND - biological_process - Process 3702 814637 GO:0003674 ND - molecular_function - Function 

保存在output.txt

这是代码,

 #include  #include  /* structure definition */ typedef struct { int taxid; int geneid; char goid[20]; char evidence[4]; char qualifier[20]; char goterm[50]; char *pubmed; char category[20]; } gene2go; /* function prototypes */ int readInfo( gene2go input[] ); void listData( char *inType, char *searchItem, gene2go input[], int i ); int main( int argc, char *argv[] ) { gene2go input[200]; int i; i = readInfo( input ); listData( argv[1], argv[2], input, i ); return 0; } /* read the input file*/ int readInfo( gene2go input[] ) { FILE *fin; char *inputName = "gene2go.txt"; int i = 0; fin = fopen( inputName, "r" ); if( fin == NULL ) { printf( "File cannot be opened\n" ); } /* end if */ else { while( !feof( fin ) ) { fscanf( fin, "%[^\t]", &input[i].taxid, &input[i].geneid, &input[i].goid, &input[i].evidence, &input[i].qualifier, &input[i].goterm, &input[i].pubmed, &input[i].category ); i++; } /* end while */ fclose( fin ); } /* end else */ return i; } /* end function readInfo */ void listData( char *inType, char* searchItem, gene2go input[], int i ) { FILE *fout; char *outputName = "output.txt"; int j; int inputType = atoi( inType ); fout = fopen( outputName, "w" ); switch( inputType ) { case 1: for( j = 0; j < i; j++ ) { if( input[j].taxid == atoi( searchItem ) ) { fprintf( fout, "%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\n", input[i].taxid, input[i].geneid, input[i].goid, input[i].evidence, input[i].qualifier, input[i].goterm, input[i].pubmed, input[i].category ); } /* end if */ } /* end for */ break; case 2: for( j = 0; j < i; j++ ) { if( input[j].geneid == atoi( searchItem ) ) { fprintf( fout, "%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\n", input[i].taxid, input[i].geneid, input[i].goid, input[i].evidence, input[i].qualifier, input[i].goterm, input[i].pubmed, input[i].category ); } /* end if */ } /* end for */ break; case 3: for( j = 0; j < i; j++ ) { if( input[j].goid == searchItem ) { fprintf( fout, "%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\n", input[i].taxid, input[i].geneid, input[i].goid, input[i].evidence, input[i].qualifier, input[i].goterm, input[i].pubmed, input[i].category ); } /* end if */ } /* end for */ break; } /* end switch */ fclose( fout ); } /* end function listData */ 

我该怎么办?

 char mystring[100]; FILE *p = fopen ("gene2go.txt" , "r"); if (p == NULL) perror ("Error opening file"); else { if ( fgets (mystring , 100 , pFile) != NULL ) puts (mystring); pch = strtok (mystring, "\t"); while (pch != NULL) { //handle each token here and insert into struct pch = strtok (NULL, "\t"); } fclose (pFile); } return 0; 

参考strtokfgets