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

时间:2018-12-03 05:33:24

标签: 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, "%s\n%s\n%s", FirstName, LastName, age);
      printf("Full Name :%s %s\n",FirstName, LastName);
      printf("Age: %s years old", age);

如何计算LAT LONG NORTH以下有几行?

1 个答案:

答案 0 :(得分:3)

首先,我将推荐fgetssscanf而不是fscanf。它使您可以更好地控制阅读过程。尤其是当fscanf%s一起使用时,应避免使用它,因为它会导致缓冲区溢出。

使用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;
}