0

我有一个文件,我需要在其中读取数据并将其存储到结构中。

10001 john
10002 david
10003 randy
10/10/2010 15:50:55 Updated by : Name

现在对于上面的文件,我需要从“10001”和“john”到“10003”和“randy”读取数据,除了最后一行(文件结尾)。

如何在C中做到这一点?

更新:最后一行将是动态的。

4

4 回答 4

0
char line[81];
FILE *f=fopen("file","rt");

while( fgets(line,sizeof line,f) )
{
int tag1;
char tag2[81];
if( 2==sscanf(line,"%d%80s",&tag1,tag2) )
{
/* do anything */
}
}
于 2010-08-05T11:55:09.240 回答
0

逐行阅读。当您EOF丢弃最后一行时。

编辑:

while (fgets(line, length, file) && !feof(file))
{
   /* process the line */ 
}
于 2010-08-05T09:26:58.660 回答
0

如果文件没有最后一行,你会怎么做?大概在某种循环中,读取每一行并保存它。

您可以在保存之前添加一个“if”,检查该行是否与您的“文件结尾”匹配。

通常,对于这类问题,将问题分解为您可以理解的部分。然后将这些位组合在一起。

如果文件看起来像,您可能还想考虑应该做什么

10001 john
10002 david
Silly line in middle of file
10003 randy
End of the file
10003 mr unexepected

您的应用程序应该能够适应奇怪的输入。

于 2010-08-05T09:28:19.227 回答
0
int id;
char name[80];

FILE *fp = fopen("data.txt", "r");

while (fscanf(fp, "%d%s[^n]", &id, name) == 2)
{
   /* do something with id and name */ 
}

您不需要先读取一行然后从中获取数据。相反,只需直接从文件中读取您需要的数据。

于 2016-03-19T16:42:34.513 回答