我必须编写一个带有单个命令行参数的程序。参数应该是要打开以供阅读的文件的名称(如果未提供参数或无法打开文件,则打印错误消息)。
程序打开文件并读取每一行,直到达到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(名称,模式)中? (代替“名字”)。
答案 0 :(得分:2)
如果不这样做,编译器将不知道FILE
是什么:
#include <stdio.h>
答案 1 :(得分:2)
问题:
予。您正在使用未初始化的check
变量;
II。 while (!eof)
几乎总是读取文件的错误方法;
III。如果没有提供头文件,我们就很难解决编译器错误。
IV。对于你的上一个问题:显然你使用包含数据的文件的名称(还有什么?)。
答案 2 :(得分:1)
除了您遗漏while
之外,您的#include <stdio.h>
循环似乎有问题。如果不满足if
条件,您将永远留在循环中。
您可能打算将fscanf
移出if
范围。此外,您需要根据读取的值重建p
。