Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果我有一个值的文本文件,我将如何读取该文件?_C_File - Fatal编程技术网

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

C 如果我有一个值的文本文件,我将如何读取该文件?,c,file,C,File,我必须编写一个只接受一个命令行参数的程序。参数应该是要打开读取的文件的名称(如果未提供参数或无法打开文件,则打印错误消息) 程序打开文件并读取每一行,直到达到EOF。文件中的每一行都有两个双值,表示每一行坐标平面上的一个点,读取这两个值,创建一个点,如果该点位于坐标平面的第一个象限,则打印该点。我有点困惑,当它说“一个命令行参数”时,它意味着什么?我试着为程序编写代码,但我不确定我是否做对了 当我试图编译代码时,它总是给我以下错误: file.c:3: error: expected ‘=’,

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

程序打开文件并读取每一行,直到达到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(名称,模式)中?(代替“名称”)。

如果您不:

 #include <stdio.h>
#包括
问题:

I.您正在使用未初始化的
检查
变量

二,
而(!eof)
几乎总是读取文件的错误方法

三、 如果不提供头文件,编译器错误对我们来说不是很容易解决的


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

您的
while
循环似乎有问题,除了您缺少
#include
。如果
如果
条件不满足,您将永远留在循环中


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

因此,当我包含文件名时,我将如何声明它?我试着在第2行和第6行用“test_points”代替“name”,但编译器仍然抱怨。对于如何将文件传递给fopen函数,我有点困惑。如果编译器仍然抱怨“test_points”是如何未声明的,我将如何声明它?我知道要申报双倍,我们会说:双倍a;我知道对于一个整数,我们会说int x;。。。但是,我该如何声明一个文本文件?@Karen我真的不明白你的问题,这没有意义。打开由文件名指定的文件,从中读取数据,然后关闭它。使用
fopen()
,然后使用
fscanf()
fread()
fgets()
fclose()
。您似乎对文件是什么或如何使用几乎一无所知。去学吧,你确实需要一些基础知识。你不能在没有挖地基的情况下盖房子。谢谢,是的,我们今天刚刚学习了文件。但我想我发现了我的错误……是的,我一定会检查我的笔记以获取文件。:)实际上,等等……如果点都为正(在第一象限),是否可以编写一个帮助函数来返回点的值?然后我可以调用这个函数来简化代码块吗?当然,你可以创建一个helper函数,也可以检查其中的值是否为正。所以在我的helper函数中,我检查了p.x和p.y,看看它是否为正(因为我有一个结构点p,在结构点内部,有双x和双y的字段),如果它是正的,我返回了p。但是,在我的else语句中,我不确定如果它是负的,返回什么…这将由你决定。如果值是负的,你会怎么做。