我有一个文件,我需要在其中读取数据并将其存储到结构中。
10001 john
10002 david
10003 randy
10/10/2010 15:50:55 Updated by : Name
现在对于上面的文件,我需要从“10001”和“john”到“10003”和“randy”读取数据,除了最后一行(文件结尾)。
如何在C中做到这一点?
更新:最后一行将是动态的。
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 */
}
}
逐行阅读。当您EOF
丢弃最后一行时。
编辑:
while (fgets(line, length, file) && !feof(file))
{
/* process the line */
}
如果文件没有最后一行,你会怎么做?大概在某种循环中,读取每一行并保存它。
您可以在保存之前添加一个“if”,检查该行是否与您的“文件结尾”匹配。
通常,对于这类问题,将问题分解为您可以理解的部分。然后将这些位组合在一起。
如果文件看起来像,您可能还想考虑应该做什么
10001 john
10002 david
Silly line in middle of file
10003 randy
End of the file
10003 mr unexepected
您的应用程序应该能够适应奇怪的输入。
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 */
}
您不需要先读取一行然后从中获取数据。相反,只需直接从文件中读取您需要的数据。