Enemies.txt라는 텍스트 파일에서 입력을 가져 왔습니다. 그러나 파일에 첫 번째 적을 인쇄 할 뿐이라는 점에서 문제가 있습니다.파일 입력이 반복되지 않음
여기 내 코드입니다 :
void Enemies :: loadEnemies()
{
string fileName = "Enemies\\Enemies.txt";
ifstream infile(fileName);
string garbage;
int loadEnemyID;
string loadEnemyName;
int loadEnemyStrength;
int loadExperienceGain;
string loadWeapon;
string loadRoom;
while(infile >> garbage >> garbage >> loadEnemyID
>> garbage >> garbage >> garbage >> loadEnemyName
>> garbage >> garbage >> loadEnemyStrength
>> garbage >> garbage >> garbage >> loadExperienceGain
>> garbage >> garbage >> garbage >> loadWeapon
>> garbage >> garbage >> loadRoom >> garbage)
{
cout << "Enemy ID: \t\t" << loadEnemyID <<"\n";
cout << "Enemy Name: \t\t"<< loadEnemyName << "\n";
cout << "Enemy Strength: \t"<< loadEnemyStrength << "\n";
cout << "Experience Gain: \t" << loadExperienceGain << "\n";
cout << "Weapon: \t\t" << loadWeapon << "\n";
cout << "Room: \t\t\t" << loadRoom << "\n";
int id = weapon.getWeaponID();
int weight = weapon.getWeight();
int damage = weapon.getDamage();
Weapons w1 (id,loadWeapon, weight,damage);
int roomID = room.getRoomID();
string roomExits = room.getRoomExits();
Rooms r1 (roomID,loadRoom, roomExits);
Enemies e1 (loadEnemyID,loadEnemyName,loadEnemyStrength,loadExperienceGain,w1,r1);
enemiesList.Append(e1);
}
}
Enemies.txt
Enemy ID: 1.
Enemy Name: Wolves.
Enemy Strength: 5.
Experience Gain: 186.
Weapon Name: Claws.
Room Name: 1.
Enemy ID: 2.
Enemy Name: Cave Bear.
Enemy Strength: 10.
Experience Gain: 302.
Weapon Name: Claws.
Room Name: 4.
Enemy ID: 3.
Enemy Name: Viking.
Enemy Strength: 6.
Experience Gain: 254.
Weapon Name: Longsword.
Room Name: 0.
Enemy ID: 4.
Enemy Name: Criminal.
Enemy Strength: 6.
Experience Gain: 198.
Weapon Name: War Axe.
Room Name: 0.
Enemy ID: 5.
Enemy Name: Ninja.
Enemy Strength: 6.
Experience Gain: 211.
Weapon Name: Katana.
Room Name: 0.
Enemy ID: 6.
Enemy Name: Wild Boar.
Enemy Strength: 3.
Experience Gain: 111.
Weapon Name: Claws.
Room Name: 0.
그러나 재미있는 것은 내가 무기 유사한 코드를 가지고 있고 그것을 완벽하게 작동합니다. 1. 무기 이름 : 카타나 ID Weapons.txt
void Weapons :: loadWeapons()
{
string fileName = "Weapons\\Weapons.txt";
ifstream infile(fileName);
string garbage;
int loadWeaponID;
string loadWeaponName;
int loadDamage;
int loadWeight;
while(infile >> garbage >> loadWeaponID >> garbage >> garbage
>> garbage >> loadWeaponName >> garbage >> loadDamage >> garbage
>> garbage >> loadWeight >> garbage)
{
//cout << "Weapon ID: \t\t"<< loadWeaponID<< "\n";
//cout << "Weapon Name: \t\t"<< loadWeaponName << "\n";
//cout << "Damage: \t\t" << loadDamage <<"\n";
//cout << "Weight: \t\t" << loadWeight << "\n";
Weapons w1 (loadWeaponID,loadWeaponName,loadDamage,loadWeight);
weaponsList.Append(w1);
}
}
. 피해 : 20 무게 :
Enemy Name: Cave Bear.
가하려고 할 때이 구문 분석을 망쳐 놨 : 두 번째와 마지막 적을 6.
ID: 2.
Weapon Name: Longsword.
Damage: 17.
Weight: 9.
ID: 3.
Weapon Name: WarAxe.
Damage: 22.
Weight: 20.
ID: 4.
Weapon Name: Staff.
Damage: 9.
Weight: 6.
ID: 5.
Weapon Name: Staff.
Damage: 3.
Weight: 0.
을 지금, 나는이 ++ 엄격 C 아니라는 것을 알고 있지만, 왜 그렇게 끔찍한'을 사용하는 것입니다 fscanf'-function? 최소한 제 의견으로는 읽고 사용하고 디버그하는 것이 더 쉽습니다. 어쨌든, 당신은 어디에서 데이터 집합 사이의 개행을 읽고 있습니까? 게다가 적 이름에 쓰레기가 너무 많습니다. 실제로 그것은 모든 데이터 포인트에 대해 단지 두 가지 '쓰레기'입니다. –
무기가 실제로 올바르게 계산됩니다. – chris
@RefugnicEternium 조언을 주셔서 감사합니다. 끝에있는 infile >> 쓰레기는 적들 사이의 줄을 읽습니다. ... – user2355394