-1

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

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

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

 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(name, mode) 中?(代替“名称”)。

4

3 回答 3

2

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

 #include <stdio.h>
于 2013-05-22T21:56:27.663 回答
2

问题:

一、你使用的是check未初始化的变量;

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

三、如果没有您也提供头文件,编译器错误对我们来说不太容易解决。

四。对于您的最后一个问题:显然您使用包含数据的任何文件的名称(还有什么?)。

于 2013-05-22T21:57:45.010 回答
1

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

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

于 2013-05-22T21:58:07.353 回答