如果我有一个值的文本文件,我该如何读取该文件?

时间:2013-05-22 21:51:58

标签: c file

我必须编写一个带有单个命令行参数的程序。参数应该是要打开以供阅读的文件的名称(如果未提供参数或无法打开文件,则打印错误消息)。

程序打开文件并读取每一行,直到达到EOF。文件中的每一行都有两个双精度值,表示坐标平面上的一个点。对于每一行,读取两个值,创建一个点,如果它位于坐标平面的第一个象限中,则打印该点。当它说“单个命令行参数”时,我对它意味着什么感到困惑,这意味着什么?我尝试为程序编写代码,但我不确定我是否做得对。

当我尝试编译我的代码时,它一直给我这些错误:

 file.c:3: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
 file.c:14: error: expected ‘)’ before ‘*’ token

这是我的代码:

#include "point.h"

FILE *open_file(char const name[], char const mode[])
{
   FILE *file = fopen(name, mode);

   if (file == NULL)
   {
      perror(name);
   }
   return file;
}

void point_in_Q1(FILE *in, FILE *out)
{
   double x, y;
   struct point p;
   int check;

   p = create_point(x, y);

   while (check != EOF)
   {
      if (p.x >= 0 && p.y >= 0)
      {
         fprintf(out, "%lf%lf", x, y);
         check = fscanf(in, "%lf%lf", &x, &y);
      }
   }
}

我感到困惑的另一件事是,如果我的文件中包含名为“test_points.c”的坐标点的值,我是否必须将其置于fopen(名称,模式)中? (代替“名字”)。

3 个答案:

答案 0 :(得分:2)

如果不这样做,编译器将不知道FILE是什么:

 #include <stdio.h>

答案 1 :(得分:2)

问题:

予。您正在使用未初始化的check变量;

II。 while (!eof)几乎总是读取文件的错误方法;

III。如果没有提供头文件,我们就很难解决编译器错误。

IV。对于你的上一个问题:显然你使用包含数据的文件的名称(还有什么?)。

答案 2 :(得分:1)

除了您遗漏while之外,您的#include <stdio.h>循环似乎有问题。如果不满足if条件,您将永远留在循环中。

您可能打算将fscanf移出if范围。此外,您需要根据读取的值重建p