前言:
这个问题是关于逐行读取文件,并将每一行插入到链表中。
我已经编写了链表的实现,并手动测试了insert()函数。这是有效的。我还编写了从文件中读取文本并将其写出的代码。同样,这也是有效的。
好的:这是我的问题
如何合并这些概念,并编写一个函数,逐行读取文件中的文本,将每一行作为节点插入链表?
读取文件时,我会执行以下操作:
//Code for reading a file
int c;
while((c = getc(f))!= EOF) {
putchar(c); //Prints out the character
}
fclose(f); //Close the file
insert()函数接受两个参数,一个是链表头节点,另一个是要保存在该节点中的dataEntry("string")。
void insert(node_lin *head, char *dataEntry) { ... }
因此,由于函数getc分别获取每个字符,而putchar将每个字符写到屏幕上,我想象代码会沿着以下几行做一些事情:
- 读取每个字符直到文件结束(EOF)
- 对于每个字符,直到到达新行('\n'),将其附加到以前读取的字符上(构建一个"字符串")
- 如果到达行的末尾,请将此"字符串"插入到链接列表中
重复直到达到EOF
//Code for reading a file int c; while((c = getc(f))!= EOF) { //Build a string here consisting of characters from c, until reaching a new line. /* if(c == 'n') { //Indicates a new line //Insert the line you have into the linked list: insert(myLinkedList, line); } */ } fclose(f); //Close the file
问题是,我已经有了一个正在工作的read_file函数,以及一个正在运行的insert()函数。我需要帮助的是将文件分成几行,然后插入这些行。
谢谢大家!
将逐字符读取替换为更高级的内容。
- 最典型的选择是
fgets()
,但这需要为线的长度指定一个静态限制 - 如果你有
getline()
,你可以使用它,它可以处理任何线路长度,但它是POSIX,而不是standarc C
此外,您应该更改insert()
函数以接受const char *
作为第二个参数(当然,请记住在内部分配内存并复制文本)。
您可以使用fgets从文件中读取整行,直到遇到新的行字符
fgets (buffer, 128, f);
读取文件时,可以执行以下操作:
//Code for reading a file
char buffer[128]; // decide the buffer size as per your requirements.
while((fgets (buffer, 128, f))!= NULL) {
printf (buffer);
}
fclose(f); //Close the file