需要帮助逐行阅读信息,并在代码中使用txt文件。

时间:2013-02-20 02:44:59

标签: c line fgets scanf

我被要求创建一个包含以下格式的行的文本文件。每种类型的信息(或字段)必须用空格分隔,每行必须以换行符结尾:

Category1 LabelA 0.32 10 0.60  8
Category1 LabelX 0.24 12 0.90  4
Category2 LabelZ 0.55 14 1.50  10

我被要求通读并使用带指针的函数来计算每个类别的整数以及所有类别的总计算。我有两个问题。

  • 我应该用\ n结束txt文件中的每一行,还是只是点击 输入(通常可以输入)就足够了吗?
  • 我应该如何阅读 文件和存储值而不修改或打开它?我 混淆使用fgets或fscanf。

1 个答案:

答案 0 :(得分:0)

逻辑:

    {li>循环!feof(FILE)
    1. fgets() 1行
    2. sscanf()
    3. 做你的计算!

可以优化以下代码以减少对函数的调用,但为了清晰表达,我创建了多个函数..每个函数只执行1个作业:

#include <stdio.h>
#include <string.h>

void get_data(const char *ptr, char *category, char *label, float *f1,
          int *fint, float *f2, int *sint) //fint = first-int, sint is second int
{
  sscanf(ptr,"%s%s%f%d%f%d\n", category, label, f1, fint, f2, sint); 
}

const char *get_line(FILE *f, char *target, size_t size)
{
  fgets(target, size, f);
}

double random_calculation(float f1, int fint, float f2, int sint) 
{
  return f1 * fint + f2 * sint;
} 

int main(int argc, char *argv[])
{
  char buffer[512];
  char label[50], category[50];
  FILE *file;
  float f1, f2; 
  int fint,sint;
  double answer;
  if(argc != 2) { puts("No file!"); return 0;}
  file = fopen(argv[1], "r");//open in text mode
  if(!file) return;
  while(!feof(file)) {
    get_line(file, buffer, 511);
    puts(buffer);
    get_data(buffer, category, label,&f1,&fint, &f2, &sint);
    answer = random_calculation(f1, fint, f2, sint);
    printf(">>> %s %s: %lf\n\n", category, label, answer);
  }
  return 0;
}