[英]Reading text files with specific format in C
我一直在尝试阅读包含 C 中具有特定格式的书籍数据库的文本文件。 这是我到目前为止所拥有的:
#include "database_main.h"
struct Book getDetailsFromFile(FILE *ptr)
{
struct Book bookVar; /*new book variable as struct*/
char title[MAX_TITLE_LENGTH+1], author[MAX_AUTHOR_LENGTH+1]; /*temp variables to input data*/
int year;
fscanf(ptr, "Title: %100[0-9a-zA-Z ]\n", title); /*fscanf collecting up to 100 character of only numbers or letters*/
fprintf(stderr, "%s\n", title);
fscanf(ptr, "Author: %100[0-9a-zA-Z ]\n", author);
fprintf(stderr, "%s\n", author);
fscanf(ptr, "Year: %i\n\n", &year);
fprintf(stderr, "%i\n", year);
strcpy(bookVar.title, title); /*transfering values to stuct*/
strcpy(bookVar.author, author);
bookVar.year = year;
bookVar.right = NULL;
bookVar.left = NULL;
return bookVar;
}
/* read file containing database of books */
void read_book_database ( char *file_name )
{
FILE *fptr; /*file pointer*/
if ((fptr = fopen(file_name, "r")) == NULL) {
fprintf(stderr, "Error! opening file\n"); /*catch error*/
}
else
{
while (feof(fptr) == 0) /*do until end of file*/
{
addBook(getDetailsFromFile(fptr)); /*adds book to database from the file*/
fprintf(stderr, "Got Book\n");
}
fprintf(stderr, "closing file\n");
fclose(fptr);
}
}
当代码运行时,它会不断重复“Got Book” ,而不会打印这本书的任何细节。
我也尝试过使用fgets()
,它确实输入了数据,但似乎将年份字段分离到数据库中的一本全新书籍中,没有其他信息。 这不是addBook()
的问题,因为它已经过手动输入测试并且可以正常工作。
其次fgets()
不会删除 Title: 以及文件每行开头的此类字段。 我尝试了其他一些在线解决方案,但都没有奏效。
谢谢你提供的所有帮助。
另请注意,这是使用 ANSI 标准编译的。
所以 while(feof(fptr)==0) 原来是问题所在,我现在将整个内容更新为以下内容:
void read_book_database ( char *file_name )
{
char c[1000];
FILE *fptr;
if ((fptr = fopen(file_name, "r")) == NULL) {
fprintf(stderr, "Error! opening file\n");
}
else
{
struct Book newBook;
for(newBook;fscanf(fptr, "Title: %100[0-9a-zA-Z ,]\nAuthor: %100[0-9a-zA-Z ,]\nYear: %i\n\n", &(newBook.title), &(newBook.author), &(newBook.year))==3;)
{
fprintf(stderr, "Title: %s\nAuthor: %s\nYear: %i\n\n", newBook.title, newBook.author, newBook.year);
addBook(newBook);
/*addBook(getDetailsFromFile(fptr));*/
fprintf(stderr, "Got Book\n");
}
fprintf(stderr, "closing file\n");
fclose(fptr);
}
}
它现在确实会在程序的不同点引起一些问题,但我认为这与文本文件的读取无关,所以我相信这个特定问题已得到解决。 感谢大家的帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.