将对象放入向量的顺序是否重要?因为现在我有一个结构,它有一些整数,一些字符数组和ID号(唯一),当我试图找到一个具有特定ID的结构时,我只能找到我作为第一个传递给它的那个,但是当我把ID作为第二个元素我得到没有找到,但我仍然可以得到所需的信息。 当我在所有程序退出时放置不存在的ID(至少那个工作)。
答案 0 :(得分:1)
代码块
else
{
printf("Trigger could not be found.\n");
}
是我认为的问题。 如果向量中有ID 1,2和3并且搜索2,则会打印出“第一次循环时无法找到触发器,然后在第二次匹配时找到。”
如果无法打开文件,您可能希望立即返回,并在循环结束后打印出“无法找到触发器”(因为如果找到了触发器,则您已经从搜索功能)
答案 1 :(得分:0)
我会在这里发布,这是代码中最重要的部分: 结构:
struct Trigger {
unsigned short int ID;
char Nazwa_Map_Do_Wczytania[30];
unsigned Offset_Triggera;
unsigned x1,y1,x2,y2;
char Identyfikator[30];
};
假设为该结构的全局向量添加新触发器的代码(damnit ==那个全局向量)
bool UtworzDat(std::vector<std::string> pliki,std::vector<Trigger> trigg, char* sciezka,Naglowek* nagl)
{
Trigger chujew;
nagl->Ilosc_Triggerow = trigg.size();
for (unsigned int i = 0; i < trigg.size(); i++)
{
memset(&chujew,0,sizeof(Trigger));
chujew.ID = trigg[i].ID;
strcpy(chujew.Identyfikator,trigg[i].Identyfikator);
strcpy(chujew.Nazwa_Map_Do_Wczytania,trigg[i].Nazwa_Map_Do_Wczytania);
chujew.Offset_Triggera = 0;
chujew.x1 = trigg[i].x1;
chujew.x2 = trigg[i].x2;
chujew.y1 = trigg[i].y1;
chujew.y2 = trigg[i].y2;
damnit.push_back(chujew);
}
然后我设置了正确的偏移量:
long prawdziwy_offset = 0;
prawdziwy_offset += sizeof(Naglowek); <--Header of file
for (unsigned int i = 0; i < trigg.size(); i++)
{
damnit[i].Offset_Triggera = prawdziwy_offset;
prawdziwy_offset += sizeof(Trigger);
}
prawdziwy_offset += nagl->Ilosc_Obrazow * sizeof(Obraz); <--It's saving structures golding information about each file inside
for (unsigned int i = 0; i < wszystkie.size(); i++)
{
wszystkie[i].Offset_Obrazu = prawdziwy_offset;
prawdziwy_offset += wszystkie[i].Rozmiar_Obrazu;
}
然后它与其他图形一起保存到.dat文件,然后我从文件和处理数据中读取头。我确信拯救是好的。
无论如何这个简单的发现:
Trigger WyciagnijTriggera(unsigned short int ID, Naglowek* nagl)
{
Trigger temp;
memset(&temp,0,sizeof(Trigger));
FILE* wejscie;
for (int i = 0; i < damnit.size(); i++)
{
if (ID == damnit[i].ID) <--here
{
wejscie = fopen(nazwa,"rb"); //<--opening file to find it
if (wejscie != NULL)
{
fseek(wejscie,damnit[i].Offset_Triggera,SEEK_SET); //<--Going to right offset
fread(&temp,sizeof(Trigger),1,wejscie);
fclose(wejscie);
return temp;
}
else
{
printf("Could not open file.\n");
}
}
else
{
printf("Trigger could not be found.\n");
}
}
}
主要看起来像:
Naglowek nowy;
Trigger kut, kutzapis,kutzapis2,kutzapis3;
memset(&kutzapis,0,sizeof(Trigger));
memset(&kutzapis2,0,sizeof(Trigger));
memset(&kutzapis3,0,sizeof(Trigger));
memset(&kut,0,sizeof(Trigger));
memset(&nowy,0,sizeof(Naglowek));
std::vector<Trigger> pedal;
strcpy(kutzapis.Identyfikator,"pedal");
strcpy(kutzapis.Nazwa_Map_Do_Wczytania, "tet");
kutzapis.x1 = 5050;
kutzapis.x2 = 9090;
kutzapis.y1 = 2323;
kutzapis.y2 = 2341;
kutzapis.ID = 1;
strcpy(kutzapis2.Identyfikator,"pedal2");
strcpy(kutzapis2.Nazwa_Map_Do_Wczytania, "tet2");
kutzapis2.x1 = 50502;
kutzapis2.x2 = 90902;
kutzapis2.y1 = 23232;
kutzapis2.y2 = 23412;
kutzapis2.ID = 2;
strcpy(kutzapis3.Identyfikator,"pedal3");
strcpy(kutzapis3.Nazwa_Map_Do_Wczytania, "tet3");
kutzapis3.x1 = 505023;
kutzapis3.x2 = 909023;
kutzapis3.y1 = 232323;
kutzapis3.y2 = 234123;
kutzapis3.ID = 3;
pedal.push_back(kutzapis3);
pedal.push_back(kutzapis2);
pedal.push_back(kutzapis);
UtworzDat(toto,pedal,"maslo.dat",&nowy); //Creating file
CzytajDat("maslo.dat",&nowy);
kut = WyciagnijTriggera(2,&nowy); //Tring to find trigger with ID: 2
std::cout << kut.ID << std::endl << kut.Identyfikator << std::endl << kut.Nazwa_Map_Do_Wczytania << std::endl << kut.Offset_Triggera << std::endl << kut.x1 << std::endl << kut.x2 << std::endl << kut.y1 << std::endl << kut.y2 << std::endl;
对不起这个长屁股代码。