使用Fopen读取C中的文件并从中获取特定值

  • 本文关键字:获取 文件 Fopen 读取 使用 c# c
  • 更新时间 :
  • 英文 :


我有一个C输入文件,我正在用Fopen读取。文件如下所示:

Nick
Sullivan
24
lat  long north
1002.3 341.23 123.9
1002.3 341.23 123.9
1002.3 341.23 123.9
1002.3 341.23 123.9
1002.3 341.23 123.9
...... tons of lines like this

我的目标是在C文件中打印姓名:Nick Sullivan年龄:24岁GPS点数:[这里是下面所有数字线的计数]

当前我有:

fscanf(fp, "%sn%sn%s", FirstName, LastName, age);
printf("Full Name :%s %sn",FirstName, LastName);
printf("Age: %s years old", age);

我怎么能数出它在北拉龙以下有多少条线?

首先,我推荐使用fgetssscanf,而不是fscanf。它能让你更好地控制阅读过程。尤其应该避免使用%sfscanf,因为它会导致缓冲区溢出。

使用fgets,您可以执行以下操作:

#define MAX_LINE_LEN 256
char str[MAX_LINE_LEN];
char FirstName[MAX_LINE_LEN];
char LastName[MAX_LINE_LEN];
unsigned age;
size_t lineCount = 0;
// Open file and check for succes
if (fgets(FirstName, MAX_LINE_LEN, fp) == NULL)
exit(1);  // error
if (fgets(LastName, MAX_LINE_LEN, fp) == NULL)
exit(1);  // error
if (fgets(str, MAX_LINE_LEN, fp) == NULL)
exit(1);  // error
if (sscanf(str, "%u", &age) != 1)
exit(1);  // error
if (fgets(str, MAX_LINE_LEN, fp) == NULL)  // Skip the "lat  long north"
exit(1);  // error
// Count lines;
float f1, f2, f3;
while(fgets(str, MAX_LINE_LEN, fp) != NULL)
{
if (sscanf(str, "%f %f %f", &f1, &f2, &f3) != 3) break;
++lineCount;
}

最新更新