Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.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_Phonebook - Fatal编程技术网

在C语言中从电话簿代码的文本文件中读取信息

在C语言中从电话簿代码的文本文件中读取信息,c,phonebook,C,Phonebook,我需要从一个文本文件中读取姓名和电话号码,并将它们保存在一个用于电话簿应用程序的结构中。问题是在不知道文本有多少行的情况下,如何安排代码,使其读取文本包含的准确行数。实际上取决于您对“读取准确行数”的定义 [1] 在一条评论中指出,一段时间/fgets是最安全的工作方式。。。读取,直到遇到EOF,然后停止 [2] 如果信息来自普通文件,您可以在读取之前统计(2)该文件以获得其确切大小 [3] (如果您猜错了,可能会出现错误,这是一个较差的解决方案):分配一个比需要大得多的缓冲区,并在一次大规模读

我需要从一个文本文件中读取姓名和电话号码,并将它们保存在一个用于电话簿应用程序的结构中。问题是在不知道文本有多少行的情况下,如何安排代码,使其读取文本包含的准确行数。

实际上取决于您对“读取准确行数”的定义

[1] 在一条评论中指出,一段时间/fgets是最安全的工作方式。。。读取,直到遇到EOF,然后停止

[2] 如果信息来自普通文件,您可以在读取之前统计(2)该文件以获得其确切大小


[3] (如果您猜错了,可能会出现错误,这是一个较差的解决方案):分配一个比需要大得多的缓冲区,并在一次大规模读取中读取所有行。为了安全起见,我会在读取之前对缓冲区进行零填充,并且读取的字节比分配的字节少一个。“read”将返回确切的字节数,除非返回read()中请求的所有字节,这表示您猜错了,缓冲区溢出。您准确读取它并且没有更多字节的可能性非常低

一个简单的技巧是读取文件两次。第一次计算行数时。然后为存储分配空间。然后您再次阅读并填充刚才分配的空间。

您可以使用逐行阅读,直到当
fgets
返回
NULL
时,读取失败。惯用循环是
while(fgets(buffer,sizeof buffer,infle)!=NULL){/*处理输入*/}
请编辑您的问题以包含相关信息:输入文本文件看起来如何?您已经编写了哪些代码?循环缓冲区可能会对您有所帮助?