在不保存的情况下读取文件 - C

时间:2015-04-24 02:22:32

标签: c file-io

我有一个超级基本的问题,但我似乎无法找到答案。也许我在想这个,如果是这样的话,我事先道歉。

我的问题在于读取一个输入文件,其中包含将打印到发票中的信息。这就是我的作业所要求的:

  

“您的程序应该在之前读取整个输入文件数据   生成任何发票。这意味着您可能无法生成   即时发票 - 就像您阅读数据一样。“

实际上,我目前只有这一行(这是我在文件中阅读的标准):

FILE *input = fopen("invoice1.txt","r");

我目前的理解是这只是设置一个指向输入文件开头的指针,准备好读入, BUT 实际上读取文件at那一点。我错了,这实际上读取文件,就像我需要它一样?如何在不将信息保存到任何地方的情况下简单地阅读文件?

谢谢!

3 个答案:

答案 0 :(得分:2)

事实上,fopen()会返回一个FILE *,稍后其他函数会使用fgets()进行阅读。

这是一个网站,上面有关于您可以阅读的内容的完整示例: http://www.programmingsimplified.com/c-program-read-file

此外,这里有stdio.h中可用于文件操作/读取的函数列表。您感兴趣的功能主要是前面带有f前缀的功能: http://www.cplusplus.com/reference/cstdio/

编辑:如果您查看我向您展示的第一个链接,程序会在每次读取字符时输出文件数据(请注意ch应该是int类型而不是{{ 1}}):

char

这似乎正是您老师不想要的: while( ( ch = fgetc(fp) ) != EOF ) printf("%c",ch);

在您的情况下,您可能希望使用像"This means that you may not generate the invoices on the fly – that is as you read the data."这样的函数,它会读取整个文件并将其转储到fgets()中供以后使用: http://www.cplusplus.com/reference/cstdio/fgets/

答案 1 :(得分:2)

  

"您的程序应在生成任何发票之前读入整个输入文件数据。这意味着您可能无法动态生成发票 - 就像您读取数据一样。"

在阅读完作业后,我的第一个想法是,您的总体任务是通过以下步骤生成发票:

  1. 按原样打开文件。
  2. 将所有数据读入某种变量。
  3. 生成发票。
  4. 将它存放在某个地方。
  5. 此报价单指定您在未完成从文件加载数据时无法开始创建发票。结论是,您必须将所有数据存储在程序中的某个位置(例如,将名称,姓氏标识为char数组)并使用变量生成新发票(这将在单独的函数中完成,如readData())。当您将所有数据存储在某处作为变量时,您应该将它们用作生成发票的函数的参数(如invoice generateInvoice(char [20] name,char [20] surname,...))。

答案 2 :(得分:2)

  

我目前的理解是这只是设置一个指向输入文件开头的指针,准备好读入,但是当时没有实际读取文件。

这是正确的。

  

我错了,这实际上会像我需要的那样读取文件吗?

不,你没错。

  

如何在不将信息保存到任何地方的情况下简单地阅读文件?

我怀疑你的老师希望你把文件的全部内容读入缓冲区并处理缓冲区,而不是逐行读取文件内容(或按记录记录)并处理它们。

This answer包含显示如何读取文件的全部内容的代码。