Struktura w pętli for

0

Witam,
Celem jest utworzenie 50'ciu wpisów typu "enemies" z tablicy "sin", co robię źle?

#include <iostream>

struct enemies
{
	std::string name;
	int hp;
	int mp;
	int dmg;
	int m_dmg;
	int speed;
	int grav;		
};


int main()
{
using namespace std;
//int i; 
//enemies sin[i] = {"Human Sin", 10, 0 , 5, 0, 80, 100}; 

for (int i = 1; i<=50; i++)	
	{
		enemies sin[i] = {"Human Sin", 10, 0 , 5, 0, 80, 100};
		cout << sin[i].name << " " << i << endl;
	}

return 0;
}
0

enemies sin[i] = {"Human Sin", 10, 0 , 5, 0, 80, 100};

#include <iostream>
#include <string>
using namespace std;

struct enemy{
	string name;
	int hp;
	int mp;
	int dmg;
	int m_dmg;
	int speed;
	int grav;                
};


int main(){
	enemy enemies[2];
	for(size_t i = 0; i < 2; ++i)
		enemies[i] = {"BATMAN!", 1, 1, 1, 1, 1, 1};
	cout << enemies[0].name;
	return 0;
}

out:
BATMAN!

0

No ok, zatem dlaczego :

enemies H_sin[50] = {"Human Sin", 10, 0 , 5, 0, 80, 100};

for (int i = 1; i<=50; i++)	
	{
		cout << H_sin[i].name;
	}

nie wyświetla "Human sin" 50 razy?

0
Sojtin napisał(a)

nie wyświetla "Human sin" 50 razy?

Pomijając, że tablice indeksowane są od zera (a nie jedynki, jak w Twoim kodzie), inicjujesz jedynie pierwszy (zerowy) element.

0

A no tak... Mimo to nadal nie rozumiem dlaczego

 for (int i=0; i<20; i++)	
	cout << H_sin[i].name;

wyświetla wynik tylko raz, przecież warunkiem brzegowym jest i==19 tak?
Wiec od 0 do 19 jest 20 powtórzeń a nie jedno.

0

Bo przypisujesz wartość jedynie pierwszemu (zerowemu) elementowi tablicy, reszta jest pusta.

0

Jeszcze raz krok po kroku.

enemies H_sin[19];       // tworze 20'sto elementową tablice "H_sin" typu "enemies"
for (int i=0; i<=19; i++)     //tworze pętle która wykonuje się 20'ścia razy
{
	enemies H_sin[i] = {"Human Sin", 10, 0 , 5, 0, 80, 100};	//wypełniam każdy element tablicy takimi samymi wartościami
	cout << H_sin[i].name;	// wyrzucam na ekran "name" z "H_sin" czyli dla wszystkich 20'stu elementów "Human Sin"
}

Gdzie popełniłem błąd?

1

porównaj mój z Twoim

enemies H_sin[20];       // tworze 20'sto elementowom tablice "H_sin" typu "enemies"
for (int i=0; i<20; i++)     //tworze pętle która wykonuje się 20'ścia razy
{
        H_sin[i] = {"Human Sin", 10, 0 , 5, 0, 80, 100};        //wypełniam każdy element tablicy takimi samymi wartościami
        cout << H_sin[i].name;        // wyrzucam na ekran "name" z "H_sin" czyli dla wszystkich 20'stu elementów "Human Sin"
} 

tworzyłeś 19 elementował tablice a później tworzyłeś w petli jakiegoś potwora. Jak stworzyłeś obiekt to wystarczy że do niego się odwłoujesz. Nie potrzebujesz już pisać przy nim typu

http://ideone.com/x2C5cs

0

Czyli mój błąd polegał na tym że nie potrzebnie podawałem typ zmiennej H_sin, dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1