我有一个超级基本的问题,但我似乎无法找到答案。也许我在想这个,如果是这样的话,我事先道歉。
我的问题在于读取一个输入文件,其中包含将打印到发票中的信息。这就是我的作业所要求的:
“您的程序应该在之前读取整个输入文件数据 生成任何发票。这意味着您可能无法生成 即时发票 - 就像您阅读数据一样。“
实际上,我目前只有这一行(这是我在文件中阅读的标准):
FILE *input = fopen("invoice1.txt","r");
我目前的理解是这只是设置一个指向输入文件开头的指针,准备好读入, BUT 实际上读取文件at那一点。我错了,这实际上将读取文件,就像我需要它一样?如何在不将信息保存到任何地方的情况下简单地阅读文件?
谢谢!
答案 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)
"您的程序应在生成任何发票之前读入整个输入文件数据。这意味着您可能无法动态生成发票 - 就像您读取数据一样。"
在阅读完作业后,我的第一个想法是,您的总体任务是通过以下步骤生成发票:
此报价单指定您在未完成从文件加载数据时无法开始创建发票。结论是,您必须将所有数据存储在程序中的某个位置(例如,将名称,姓氏标识为char数组)并使用变量生成新发票(这将在单独的函数中完成,如readData())。当您将所有数据存储在某处作为变量时,您应该将它们用作生成发票的函数的参数(如invoice generateInvoice(char [20] name,char [20] surname,...))。
答案 2 :(得分:2)
我目前的理解是这只是设置一个指向输入文件开头的指针,准备好读入,但是当时没有实际读取文件。
这是正确的。
我错了,这实际上会像我需要的那样读取文件吗?
不,你没错。
如何在不将信息保存到任何地方的情况下简单地阅读文件?
我怀疑你的老师希望你把文件的全部内容读入缓冲区并处理缓冲区,而不是逐行读取文件内容(或按记录记录)并处理它们。
This answer包含显示如何读取文件的全部内容的代码。