![](/img/trans.png)
[英]c++ reading a a txt file line by line into a char array within an array of structures
[英].txt file to an array of structures in C++?
我以前使用過 C++,但我可以肯定地說我不是專業人士。 甚至在編碼方面都不是。 我正在嘗試,盡管看起來可能不像。 :/
我的任務是創建一個類型為“book_list”的結構數組。
結構如下所示:
struct book_list
{
int bookNumber; string bookTitle; string bookAuthor;
string bookDescription; int bookMonth; int bookYear; int bookRating;
};
創建數組本身很容易:
book_list myBookList[50];
這是我遇到麻煩的地方:
該程序旨在搜索 .txt 文件。 如果找到它,它將把文件中包含的所有數據讀入結構數組。 因此,bookNumber 與 .txt 文件的 bookNumber 等。
我一整天都在尋找可能的解決方案,我研究了ifstream、getline、使用迭代器等想法。我的研究和我的大腦一樣分散,我覺得我有點難住了。
請幫助,如果您需要任何進一步的信息,請告訴我!
謝謝,
-喬恩
您需要單獨讀取/解析每個條目或讀取整個文件然后解析它。 由於您無論如何都將所有結構存儲在內存中,如果您不想一次讀取一個,后者可能沒問題,但出於教育目的,您可能想嘗試一次讀取一個。 也許用線分開?
然后您需要一種解析條目的方法。 沒有一種方法可以做到這一點,但最簡單的方法可能是使用 JSON 格式的文本文件,主要是因為有可以使用它的庫和可以幫助將其可視化的工具。 JSON 允許您表示字典、數組、字符串、數字和布爾值。 您可以不費吹灰之力地手動執行此操作,因為您沒有像嵌套結構這樣的花哨的東西,或者您可以使用這樣的庫為您解析 JSON: https : //github.com/DaveGamble/cJSON (在C,如果你想使用 C++,就必須與 C++ 鏈接)
假設問題可以表述為:
你能給我一個可以啟動我的練習的小編程示例嗎:
程序p:
#include <iostream>
using namespace std;
int main() {
int num;
string buf;
while (true) {
cin >> num; if (cin.eof()) break;
cin >> buf; if (cin.eof()) break;
cout << "num is: " << num << " buf is: " << buf << endl;
}
}
文本文件 t.txt
1
one
2
two
你可以跑
p < t.txt
並查看輸出是否符合您的預期。
現在當然改變cin >> num; 進入cin >> booklist[0].bookNumber; 等等,你的鍛煉就會走上正軌。
將<stdio.h>
用於FILE
。
char *name;
FILE *file;
name = "database.txt";
file = fopen(name,"w+");
book_list myBookList[50];
寫作時使用這個。
book_list newRecord;
newRecord.bookNumber = 0;
//other assignments
fseek(file,0,SEEK_END);
fwrite(&newRecord,sizeof(book_list),1,file);
fclose(file);
閱讀時使用下面。
file = fopen(name,"r+");
book_list record;
fseek(file,0,SEEK_SET);
int i=0;
while(true){
fread(&record,sizeof(book_list),1,file);
if(feof(file))
break;
myBookList[i].bookNumber = record.bookNumber;
//other assignments
i++;
}
fclose(file);
注意:我不確定這是否與字符串類一起正常工作。我已將其與char[SIZE]
和strcpy
。 我的建議是首先嘗試使用內置類型,如int, float, char
等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.