File C++;加载对象数组时程序崩溃 你好,我试图用C++中的文本文件填充一个对象数组,但是每次运行程序时都有一个崩溃。我在这里的方向对吗?还有更有效的方法吗
main.cppFile C++;加载对象数组时程序崩溃 你好,我试图用C++中的文本文件填充一个对象数组,但是每次运行程序时都有一个崩溃。我在这里的方向对吗?还有更有效的方法吗,file,io,File,Io,main.cpp #include <iostream> #include <string> #include <stdio.h> #include <fstream> #include "Item.h" using namespace std; void readItems(FILE *products, Item pList[]); FILE *products; int main() { Item pList[5];
#include <iostream>
#include <string>
#include <stdio.h>
#include <fstream>
#include "Item.h"
using namespace std;
void readItems(FILE *products, Item pList[]);
FILE *products;
int main()
{
Item pList[5];
readItems(products,pList);
return 0;
}
void readItems(FILE *products, Item pList[]){
products = fopen("data.txt", "r");
int i = 0;
fread(&pList[i], sizeof(pList), 1, products);
while (!feof(products))
{
i++;
fread (&pList[i], sizeof(pList), 1, products);
}
fclose(products);
}
#包括
#包括
#包括
#包括
#包括“项目h”
使用名称空间std;
作废读取项目(文件*产品,项目pList[]);
档案*产品;
int main()
{
项目pList[5];
读取项目(产品、pList);
返回0;
}
作废读取项目(文件*产品,项目pList[]){
products=fopen(“data.txt”、“r”);
int i=0;
fread(和pList[i],sizeof(pList),1,产品);
而(!feof(产品))
{
i++;
fread(和pList[i],sizeof(pList),1,产品);
}
fclose(产品);
}
项目1.cpp
#include "Item.h"
#include <stdio.h>
#include <string>
#include <conio.h>
#include <iostream>
using namespace std;
Item::Item()
{
code = 0;
description = "";
price = 0;
}
Item::Item(int code1,string description1,float price1)
{
code = code1;
description = description1;
price = price1;
}
void Item::printData(){
cout<<endl<<"Code:"<<code<<"\tName:"<<description<<"\tPrice:"<<price;
}
void Item::setData(int code1,string description1,float price1){
code = code1;
description = description1;
price = price1;
}
int Item::getCode(){
return code;
}
float Item::getPrice(){
return price;
}
Item::~Item()
{
//dtor
}
#包括“Item.h”
#包括
#包括
#包括
#包括
使用名称空间std;
Item::Item()
{
代码=0;
description=“”;
价格=0;
}
Item::Item(整数代码1,字符串描述1,浮动价格1)
{
代码=代码1;
描述=描述1;
价格=价格1;
}
无效项::printData(){
不能试着更换
while (!feof(products))
{
i++;
fread (&pList[i], sizeof(pList), 1, products);
}
与
while(!feof(产品)和&(i<5))
{
i++;
fread(和pList[i],sizeof(pList),1,产品);
}
这是我填充数组的方式。我认为你会得到奇怪的符号,因为fread(&list[i],sizeof(list[i]),1,products);从文件中读取一个sizeof(list[i])字节的元素,所以你在数组中得到一个元素,其他任何东西都是垃圾。解决方法是设置不同的大小(字节)读取,分为三个元素。因此请尝试fread(&list[i],5,3,fin)。我不确定,我在代码中使用了fscanf,工作起来很有魅力
void readItems(FILE *fin,Item list[])
{
int i=0;
int code;
char description[15];
float price;
fin=fopen("items.txt", "r");
fscanf (fin,"%i %15[a-zA-Z ]s",&code,description);
fscanf (fin,"%f",&price);
list[i].setData(code,description,price);
while (!feof(fin)&&i<5)
{
i++;
fscanf (fin,"%i %15[a-zA-Z ]s",&code,description);
fscanf (fin,"%f",&price);
list[i].setData(code,description,price);
}
fclose(fin);
}
void readItems(文件*fin,项目列表[])
{
int i=0;
int代码;
字符描述[15];
浮动价格;
fin=fopen(“items.txt”、“r”);
fscanf(fin,“%i%15[a-zA-Z]s”&代码,说明);
fscanf(财务、%f和价格);
列表[i].setData(代码、说明、价格);
虽然(!feof(fin)和&ifread
ing结构有机会使用POD类型;但是如果您有类似于std::string
的东西,或者虚拟方法,或者在项中有任何特定于C++的东西,您必须[de]一个字段一个字段地序列化。Item.h
丢失了,所以我不得不猜测……但不是description
std::string吗?(好吧,即使description
是char*
),它还是会崩溃的)我的伙伴们……我没钱了……:(
while (!feof(products) && (i < 5))
{
i++;
fread (&pList[i], sizeof(pList), 1, products);
}
void readItems(FILE *fin,Item list[])
{
int i=0;
int code;
char description[15];
float price;
fin=fopen("items.txt", "r");
fscanf (fin,"%i %15[a-zA-Z ]s",&code,description);
fscanf (fin,"%f",&price);
list[i].setData(code,description,price);
while (!feof(fin)&&i<5)
{
i++;
fscanf (fin,"%i %15[a-zA-Z ]s",&code,description);
fscanf (fin,"%f",&price);
list[i].setData(code,description,price);
}
fclose(fin);
}